Python Pandas 에서 특정 컬럼값의 row를 제거하기

특정값제거1

파이썬의 Pandas를 사용하면서 특정값의 row 가 존재할 때, 이 row를 제거하려면 그 값이 들어가는 row를 제외한 나머지 값들을 다시 dataframe으로 load하면 손쉽게 데이터를 처리할 수 있다.

위의 그림은 랜덤으로 생성한 데이터에서 몇몇 부분의 데이터가 0이 존재하는 그림이다. 여기에서 0값을 가지는 데이터를 제거하는 데이터 전처리 작업이다.

아래 그림은 그 결과값이다.

특정값제거2

null값이 아닌 특정값을 제거하고자 할 때 사용하면 데이터 전처리를 할 떄 매우 유용할 것으로 보인다.

시계열 데이터 전처리하기

Python pandas DataFrame 이나 Series 내 ‘문자열 칼럼’을 ‘숫자형’으로 변환(how to convert string columns to numeric data types in pandas DataFrame, Series) 하는 2가지 방법에 대한 해결책!

(1) pd.to_numeric() 함수를 이용한 문자열 칼럼의 숫자형 변환
(2) astype() 메소드를 이용한 문자열 칼럼의 숫자형 변환

1-1. 한개의 문자열 칼럼을 숫자형으로 바꾸기
변수명[‘새로운컬럼’] = pd.to_numeric(변수명[‘숫자형으로 바꿀 문자형 컬럼’])

1-2. apply() 함수와 to_numeric() 함수를 사용해 DataFrame 내 다수의 문자열 칼럼을 숫자형으로 바꾸기
변수명[[‘새로운컬럼1’, ‘새로운컬럼2’]] = 변수명[[‘기존컬럼’, ‘기존컬럼’]].apply(pd.to_numeric)

1-3. 모두 한번에 바꾸기
[새로운변수명] = [기존변수명].apply(pd.to_numeric)

2-1. DataFrame 내 모든 문자열 칼럼을 float로 한꺼번에 변환하기
[세로운변수명] = [변수명].astype(float)

2-2. DataFrame 내 문자열 칼럼별로 int, float 데이터 형식 개별 지정해서 숫자형으로 변환하기
[새로운변수명] = [변수명].astype({‘컬럼1’: int,
‘컬럼2’: np.float})

  • DataFrame에 문자가 포함된 칼럼이 같이 있을 경우 ValueError

공공데이터csv_한글깨짐현상_문제해결.md

pandas 공데이터 한글깨짐현상 문제해결

  • 공공데이터 포털에서 다운로드 받은 csv파일을 pandas에서 로딩할 때 한글깨짐 현상을 해결하는 방법에 대하여 알아보겠습니다.
  • 한글 깨짐 현상을 해결하기 전에 영어는 아무 문제가 없지만, 한글 파일을 읽어올 때는 종종 문제가 발생하게 됩니다.
  1. Encoding. 기본적인 이해
  • 문자형 데이터는 컴퓨터가 인식을 하지 못하기 때문에 우리는 이것을 컴퓨터가 이해할 수 있도록 Bit 형태로 변형해야합니다.

  • 1Byte = 8Bit

  • Ascii 계열의 문자열은 0~127까지 표현되기 때문에 1Byte 안에 충분히 표현될 수 있습니다. 하지만, 한글은 Ascii 안에 표현이 불가하기 때문에 표현하기 위해서는 Byte가 충분히 더 필요합니다.

  • 인코딩은 한글과 같은 Ascii 범위를 벗어난 문자를 표현하기 위한 변형 작업이라고 이해하시면 쉽습니다. 하지만, 문제는 이러한 인코딩 방식이 여러가지 입니다.

  1. 공공데이터(csv) 파일의 encoding
  • 공공데이터파일은 utf8 방식이면 좋겠으나, 아쉽게도(?) cp949 혹은 euc-kr 형식으로 인코딩이 되어 있습니다.

  • 이러한 이유때문에 pandas에서 파일을 불러오면,,

    • ‘utf8 codec can’t decode byte 0xb1 in position 0: invalid start byte’

라는 에러메세지가 발생하게 됩니다.

  • 해결책1
  • pandas에서 파일을 불러올 시, ‘engine=python’ 이라는 코드를 같이 작성하기
  • df = pd.read_csv(‘test.csv’, engine=’python’)
  • 불러오게 되면 작동은 하나 한글이 ???형식으로 나타나게 되기도 합니다.
  • 해결책2
  • pandas에서 파일을 불러올 시, ‘encoding=utf8’ 이라는 코드를 같이 작성하기
  • df = pd.read_csv(‘test.csv’, encoding=’utf8’)
  • 그러나 공공데이터의 경우 해결되지 않는 경우가 많습니다.
  • 해결책3
  • Excel에서 파일의 인코딩 옵션 변경하기
  • 파일을 불러온 후, 다름이름 저장하기를 통해 고급옵션의 파일인코딩 형식을 utf8로 변경 후 저장하기
  • 해결책4
    해결책1번의 코드를 작성한 후, encoding=cp949 라는 코드를 통해 불러오기
    (이렇게 해서 공공데이터 불러오기를 성공하였으나, utf8의 호환성이 가장 좋기에 utf8로 불러오는 것이 가장 좋다고 판단되어집니다.)

wglee87DB-엑셀파일-insert하기

엑셀로 정리된 파일들을 mysql 데이터베이스로 한번에 가져오는 방법(기록용)

  1. 엑셀파일의 전처리 작업
    • 가져올 데이터만 남기고 열 이름은 삭제
  1. 엑셀파일을 csv파일로 저장
    • 다른이름으로 저장하기 > encoding=utf8 (utf8 미설정 시 한글폰트가 깨질 수 있음) > 확장자 csv로
      저장하기
  1. mysql로 접속하기
    • mysql에 접속 (필자는 sequel pro를 활용)
  1. 데이터베이스, 테이블 생성 및 encoding 변환
    • 단, 테이블 구조와 csv파일 구조가 같아야함
    • CREATE TABLE [테이블명](column이름 텍스트형식)
    • encoding=utf8로 변환
    • ALTER DATABASE [DB명] CHARACTER SET = utf8
    • ALTER TABLE [테이블명] CHARACTER SET = utf8
  1. 데이터 insert
    • LOAD DATA LOCAL INFILE [FILE_PATH] INTO TABLE DB명.TABLE명 FIELDS TERMINATED BY ‘,’;

title: ‘[wglee87DB] 엑셀파일 insert하기’
date: 2020-04-27 19:24:50
tags:


공부내용

  1. markdown, vim, git 기초개념
  2. github에 repo 생성 후 파일 add, commit, push 하는 방법
  3. github 블로그 생성 (hexo를 통해)

200422-공부내용

  1. 수학(math)

    • 데이터분석에서의 미,적분
    • 최적화(optimize)
  2. git

    • 2번째 강의(branch 강의)
    • 첫번째 협업 연습(fork and merge)

title: 200422-공부내용
date: 2020-04-22 21:00:53
tags:


200420-공부내용

파이썬(Python) 학습

  1. 프로그래머스 코딩테스트 연습
    • startswith()
    • startswith란 앞의 변수와 value값이 뒤의 변수의 value중 같은 단어로 시작하는 것이 있으면 True or False를 반환하는 함수
  1. k리그1 데이터 전처리작업
    • 선수 별 퍼포먼스 데이터의 누적합 연습
    • reduce, 반복문을 통해 코딩함 (실패)
    • numpy 나 pandas dataframe 의 function중 cumsum()이라는 누적합 기능이 있음
    • cumsum(). 좋은 것을 또 하나 찾았고, 공부했다.
    • def 함수를 만들어 apply 기능을 통해 적용시키는 방법은 조금 더 연습이 필요할듯 하다.
  1. 가상환경에서의 주피터 실행
    • 계속적으로 실패중
    • 포트 등록까지 하고 열었는데 열리지 않음 계속적으로.
    • 강사님의 도움이 절실함

수학(math) 학습

  1. 행렬의 성질
    • 행렬의 크기 및 부피를 나타내는 3가지 성질(놈(norm), 대각합(trace), 행렬식(determinants)
    • 놈(norm)은 항상 0보다 같거나 크다.
    • 벡터의 놈(norm)의 성질은 벡터의 놈의 제곱이 벡터의 제곱합과 같다.
    • 대각합(trace)은 정방핸렬에 대해서만 정의 됨.
    • 양의 정부호와 양의 준정부호
    • 대칭행렬이란 A라는 행렬의 전치행렬과 원래의 A가 같은 행렬.
  1. 좌표와 변환
    • 좌표벡터의 길이는 놈(norm)으로 구할 수 있음.
    • 스칼라와 좌표벡터를 곱하면 방향은 그대로, 실수(스칼라)의 크기 만큼 길이가 길어짐.
    • 여러개의 벡터를 스칼라값을 곱한 후 더한 것 - 선형조합.
    • 좌표에서 벡터의 차는 좌표의 a와 b을 빼면 됨 (a-b)
    • 유클리드 거리
    • sin@은 @가 0에 가까워질수록 0에 가까워지고, @가 90도에 가까워질수록 1에 가까워진다.
    • cos@은 @가 0에 가까워질수록 1에 가까워지고, @가 90도에 가까워질수록 0에 가까워진다.
  • a와 90도 만나는 b의 좌표를 직교라고 한다. ex) 1,0 과 0,1
  • 코사인 유사도
    • 두 벡터의 방향이 비슷할수록 벡터가 비슷하다고 간주 > 코사인 유사도가 1이면 가장 유사하다’라고 봄.
  • 고윳값
    • [정리] 중복된 고윳값을 각각 별개로 새ㅐㅇ각하고 복소수인 고윳값도 고려한다면 n차원 정방행렬의 고윳값은 항상 n개이다.

이상. (전혀 이해가 되지 않는다. 큰일이다)

title: 200420-공부내용
date: 2020-04-20 18:58:01
tags:


200418-공부내용

  1. 파이썬

    • 프로그래머스 코딩테스트 문제풀이
    • k리그1 데이터로 pandas 데이터 로드, 전처리 작업 연습
    • 가상서버 연결 실패 (연결이 안됨)
  2. 수학

    • 오전에 강사님의 강의
    • 도저히 이해가 되질 않아서 처음부터 다시 차근차근 공부시작
    • 수열과 스칼라, 벡터, 행렬 등 공부 (이정도는 이해)
    • 내일도 수학 공부 예정 (큰일남)
  3. git과 블로그에 오늘의 공부내용 업로드


title: 200418-공부내용
date: 2020-04-18 21:10:47
tags:


git is awesome

What is git?

  • Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Why to use git?

How to use git?