판다스로 전처리를 하게 되는 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로 변환해줌