본문 바로가기

카테고리 없음

[Pandas] CSV 파일 불러올 때 팁 [encoding, datetime, leading zeros etc.]

판다스로 전처리를 하게 되는 raw data가 CSV 파일 형태로 주어지는 경우가 가장 흔한 것 같다.

 

CSV 파일을 데이터프레임으로 불러올 때 알아두면 유용한 코드들을 모아보았다.

 

 

1. CSV를 그냥 df로 가져오는 방법

 

import pandas as pd
df = pd.read_csv ('file_name.csv')
print(df)

 

2. CSV 불러올 때 index column 안불러오고 싶을 때

 

원래 CSV 파일에는 index column이 없는 경우가 많지만, 내가 pandas로 전처리한 결과값을 csv 파일로 저장해두고,

이를 나중에 불러 올 때는 index column이 갑자기 생겨서 이를 지우고 싶을 때가 있다.

	df = pd.read_csv('mydf.csv',index_col=0)

	#애초에 저장을 제대로 하자... 인덱스 없이 저장할땐
	df = to_csv('mydf.csv',index=False)

 

3. CSV 불러오는데 한글이 깨지는 경우

한글 깨지는 경우는 90% 인코딩 문제이다.

df = pd.read_csv("kor_stocks.csv",encoding='CP949')

 

4. leading zeros 가 있는데, 숫자가 아닌 문자 (string) 형태로 불러오고 싶을 때)

 

03212343232 등 전화번호처럼  같이 앞에 0이 있는 값을 그냥 바로 불러오면 Pandas는 숫자로 인식해서 앞에 있는 0을 없애버린다. 0을 살리고 싶을 때 아래를 쓰면 된다.

## 모든 열을 string으로 불러오기
pd.read_csv('sample.csv', dtype = str)


## 특정 열만 string으로 불러오기
#1단계 string으로 불러오고 싶은 열 이름을 list에 담기
lst_str_cols = ['prefix', 'serial']
#2단계  dictionary comprehension 으로 딕셔너리 만들기 
dict_dtypes = {x : 'str'  for x in lst_str_cols}

### 예를 들어 {'prefix':'str', 'serial':'str}

#3단계 : 내가 만든 dict을 dtype에 집어넣기
pd.read_csv('sample.csv', dtype=dict_dtypes)

 

 

5. 날짜(datetime)은 바로 datetime Object으로 인식해주고 싶을 때 

 

# 1단계 : parse_dates라는 parameter 활용하기
date_cols = ['날짜']
newtest_df = pd.read_csv('SAMPLE.csv', parse_dates=date_cols)
newtest_df

 

보통 CSV import 할 때는 날짜를 저렇게 처리해줘야 한다.

(CSV 자체는 날짜형식을 구분해서 담아내지 못하기 때문이다.)

즉 pandas한테 어떤 열이 날짜인지 알려주는 것이다.


만약 저렇게 안된다면 구체적으로 date-parser를 지정하는 것도 가능하다.

 

from datetime import datetime
dateparse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv(infile, parse_dates=['datetime'], date_parser=dateparse)

 

참고로, strptime은 'string, parse time'의 약자.
x라는 string이 있고, 형태가 '%Y-%m-%d %H:%M:%S'인 경우 이를 parse해서 datetime object로 변환해줌