pandas.read_csv() 에서 왠만하면 컬럼타입을 지정하자
다음과 같은 파일이 있다 :
CODE,DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME
000020,20190502,901,9770,9790,9770,9790,98
000020,20190502,902,9830,9830,9830,9830,1
000020,20190502,903,9830,9850,9830,9850,1
그렇다. 이건 하루치 분봉 데이터를 모은 것으로, 46M 정도의 크기이다.
이를 다음과 같이 나이브하게 로드했다:
>>> df=pd.read_csv('test.csv')
sys:1: DtypeWarning: Columns (0) have mixed types. Specify dtype option on import or set low_memory=False.
분봉이므로 9시 1분부터 오후 3시 30분까지 383개의 데이터가 존재한다.
그런데 다음과 같은 명령으로 조회시 특정 컬럼에 대해서만 개수가 모자라는 현상이 있었다 :
>>> df[df['CODE']=='071970']
262140 071970 20190502 1029 5170 5170 5170 5170 1
262141 071970 20190502 1030 5170 5170 5170 5170 0
262142 071970 20190502 1031 5140 5140 5130 5140 177
262143 071970 20190502 1032 5140 5140 5130 5140 0
[92 rows x 8 columns]
중간에 전처리가 잘못됐나 열심히 살펴봤지만 문제 없다.
그런데 메시지를 다시보면, 타입 경고가 떠있다. stackoverflow 느님에 의하면. pandas 가 컬럼 타입을 동적으로 추론하는 데에는 많은 메모리가 소모된다고 한다.
그것과 이것이 무슨 관계일까? 라는 의심은 들었으나, 다음과 같이 타입을 명시해봤다.
>>> df = pd.read_csv(infile,error_bad_lines=True,dtype={'CODE':np.str})
CODE,DATE,TIME,OPEN,HIGH,LOW,CLOSE,VOLUME
000020,20190502,901,9770,9790,9770,9790,98
000020,20190502,902,9830,9830,9830,9830,1
000020,20190502,903,9830,9850,9830,9850,1
그렇다. 이건 하루치 분봉 데이터를 모은 것으로, 46M 정도의 크기이다.
이를 다음과 같이 나이브하게 로드했다:
>>> df=pd.read_csv('test.csv')
sys:1: DtypeWarning: Columns (0) have mixed types. Specify dtype option on import or set low_memory=False.
분봉이므로 9시 1분부터 오후 3시 30분까지 383개의 데이터가 존재한다.
그런데 다음과 같은 명령으로 조회시 특정 컬럼에 대해서만 개수가 모자라는 현상이 있었다 :
>>> df[df['CODE']=='071970']
262140 071970 20190502 1029 5170 5170 5170 5170 1
262141 071970 20190502 1030 5170 5170 5170 5170 0
262142 071970 20190502 1031 5140 5140 5130 5140 177
262143 071970 20190502 1032 5140 5140 5130 5140 0
[92 rows x 8 columns]
중간에 전처리가 잘못됐나 열심히 살펴봤지만 문제 없다.
그런데 메시지를 다시보면, 타입 경고가 떠있다. stackoverflow 느님에 의하면. pandas 가 컬럼 타입을 동적으로 추론하는 데에는 많은 메모리가 소모된다고 한다.
그것과 이것이 무슨 관계일까? 라는 의심은 들었으나, 다음과 같이 타입을 명시해봤다.
>>> df = pd.read_csv(infile,error_bad_lines=True,dtype={'CODE':np.str})
262431 071970 20190502 1520 5120 5120 5120 5120 56
262432 071970 20190502 1521 5120 5120 5120 5120 0
262433 071970 20190502 1530 5150 5150 5150 5150 583
[382 rows x 8 columns]
Boom!
왜 이런 문제가 생기는 것인지는 내부 구조까지 들여다보지는 않았지만, 어쨌든 제목과 같이 중요한 교훈을 얻었다.
끝.
댓글
댓글 쓰기