본문 바로가기
코딩/데이터분석(Pandas, ML, etc)

판다스(Pandas)에서 엑셀, CSV 파일의 일부만 불러오기, 데이터타입과 포맷 지정하기

by 나홀로코더 2021. 12. 16.
반응형

목차

1. 데이터의 일부만 불러오는 옵션

2. 데이터의 유형이나 포맷을 변경하는 옵션


 

앞서 판다스에서 엑셀이나 CSV 파일을 불러오는 기초적인 방법을 소개하였다.

 

그런데 실제로 데이터를 불러와 보면, 필요 없는 행이나 열이 많이 섞여 있거나, 데이터 유형이 잘못돼 있는 등의 이유로 데이터를 손봐야 할 때가 많다.

 

여기에서는 그러한 후처리 과정을 줄여줄 수 있도록, 파일을 불러올 때부터 옵션을 추가하는 방법을 소개한다.

 

1. 데이터의 일부만 불러오는 옵션

 

데이터의 앞부분만 불러오고 싶을 떄

 

원시데이터의 파일의 크기가 지나치게 크거나, 모든 행을 다 불러올 필요는 없는 경우가 있다.

 

전체 데이터에서 앞부분만 불러오려 한다면 nrows 옵션을 이용하면 된다.

 

다른 게시글(엑셀 대신 파이썬의 판다스 라이브러리를 사용해야 하는 이유)에서 공공데이터포털에서 받은 CSV 파일을 불러오는 예제를 소개하였는데, 이 파일은 용량이 100메가바이트로 꽤 커서 모두 불러오는 데만 6초가 넘게 걸렸다.

 

이럴 때는 nrows 옵션을 이용해서 내가 원하는 만큼만 데이터를 불러올 수가 있다.

 

아래와 같이 20개 열만 불러오라고 하니 0.7초밖에 걸리지 않는다.

 

import pandas as pd
df = pd.read_csv(
    '국민연금공단_국민연금 가입 사업장 내역_20211118.csv', 
    encoding='cp949', 
    nrows=20)

 

일부 칼럼만 지정해서 불러오고 싶을 때

 

대부분의 원시데이터에는 내가 하려는 분석에 필요하지 않은 데이터들이 많이 포함되어 있다.

 

그럴 때 모든 데이터를 불러오면, 코드 편집기 내에서 보기 좋게 표시되지도 않을 뿐만 아니라, 시간도 더 오래 걸린다.

 

그럴 때는 usecols 옵션을 이용해서 내가 불러오고 싶은 열을 특정할 수 있다.

 

위에서 본 공공데이터포털 자료를 불러와 보면, 칼럼이 총 22개로 지나치게 많아 칼럼명들이 세로로 표시되어 가독성이 떨어지고 보기가 안 좋다.

공공데이터포털 자료의 열머리가 출력된 모습

 

이럴 때 아래와 같이 내가 불러오고 싶은 열의 번호(0부터 시작)의 리스트를 usecols로 넘겨주면 훨씬 보기가 좋아진다.

 

import pandas as pd
df = pd.read_csv(
    '국민연금공단_국민연금 가입 사업장 내역_20211118.csv', 
    encoding='cp949', 
    usecols=[1, 2, 5, 13, 18, 19])

 

usecols를 사용해 불러온 결과

 

내가 필요한 칼럼이 몇 번째에 있는지는 CSV 파일을 열어서 봐도 되겠지만, 앞에서 본 nrows 옵션을 이용하면 열머리만 불러와서 볼 수 있다.

 

nrows를 0으로 두면 열머리만 불러오고, rows를 1로 두면 샘플 데이터도 함께 볼 수가 있다.

 

 

위를 보면 중간이 생략돼 있는데, 모든 칼럼명을 보고 싶다면 df.columns를 입력하면 된다.

 

 

 

반응형

 

2. 데이터의 유형이나 포맷을 변경하는 옵션

 

칼럼별로 데이터 타입을 지정하고 싶을 때

 

데이터를 불러오다 보면 분명히 숫자 데이터인데 object로 불러올 때가 있다.

 

그런 경우 infer_objects 함수나 astype 함수로 사후에 타입을 변경해줄 수도 있지만, dtype 옵션을 이용하면 데이터를 불러올 때부터 칼럼별로 데이터 타입을 지정할 수가 있다.

 

dtype 옵션으로는 아래와 같이 칼럼의 번호와 원하는 데이터 타입을 딕셔너리로 넘겨 주면 된다.

 

이때, 예시와같이 넘파이의 자료형으로 지정을 하려 한다면 먼저 넘파이를 임포트해줘야 한다.

 

import pandas as pd
import numpy as np
df = pd.read_csv(
    '국민연금공단_국민연금 가입 사업장 내역_20211118.csv', 
    encoding='cp949', 
    usecols=[1, 2, 5, 13, 18, 19],
    dtype={19: np.int64})

 

천 단위가 쉼표로 구분된 파일을 숫자형으로 불러오고 싶을 때


금액 등 숫자데이터는 가독성을 위해서 천 단위마다 쉼표가 찍혀 있는 경우가 많다.

 

그런데 숫자 사이에 쉼표가 찍혀 있으면 이를 숫자로 인식하지 않아 object로 불러오게 된다.

 

그럴 때는 원데이터를 불러올 때부터 천 단위 구분자가 무엇인지를 알려주는 thousands 옵션을 추가하면, 알아서 쉼표를 제거하고 숫자형으로 불러와준다.

 

실제 데이터 분석에서 활용도가 높은 옵션이라고 생각한다.

 

import pandas as pd
import numpy as np
df = pd.read_csv(
    '국민연금공단_국민연금 가입 사업장 내역_20211118.csv', 
    encoding='cp949', 
    thousands=',')

 

 

결측치가 있는 경우 

 

원데이터에 결측치가 있는 경우는 매우 빈번하다. 사실은 거의 항상 있다고 봐야 할 것이다.

 

그런데 그 결측치를 표시하는 방식이 다양하다 보니, 결측치인데도 일반 문자열로 인식하고 불러오게 될 수가 있다. 

 

그럴 때는 na_values 옵션을 추가하여 결측치로 불러올 데이터들을 명시해주면 편리하다.

 

아래 예시는 x표와 -(빼기) 표시를 결측치로 인식하도록 한 것이다.

 

import pandas as pd
df = pd.read_csv(
    '국민연금공단_국민연금 가입 사업장 내역_20211118.csv', 
    encoding='cp949', 
    na_values=['-', 'x'])

 

참고로, 별도로 지정해주지 않더라도 결측치로 인식되는 값들도 있다. ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’

반응형

댓글