chunksize 로 나눠서 데이터를 읽어오다가 중간에 data truncated 오류가 났습니다.
MySQL에 오류 수정을 하고 다시 데이터를 읽어들이려니, 중간부터 시작해야 했습니다.
데이터 중간부터 읽어오는 법 포스트입니다.
방법
판다스에서 pandas.read_csv() 함수의 옵션을 활용하면 됩니다.
그 중에 제가 필요했던 옵션은 아래 세 가지 입니다.
(1) header
- 첫 행을 컬럼으로 지정할지 여부
- default는 첫 행을 컬럼으로 지정합니다. header=None 을 하면 컬럼으로 지정하는 행이 없게 합니다.
- header=0 이라고 하면 원본 데이터의 첫 행을 컬럼으로 지정해주는건가 싶었지만,
중간부터 읽어들이기 때문에 그렇지 않았습니다.
- 예를 들어, 51행부터 읽어들인다 했을 때,
header=0 이라고 하면, 51번째 행을 컬럼으로 지정하고 52번째 행부터 값으로 읽어들입니다.
- 그래서 header=None으로 지정한 후 names 에서 컬럼을 지정해주었습니다.
(2) names
- 컬럼으로 사용할 이름을 리스트로 입력합니다.
(3) skiprows
몇번째 행까지 스킵할 것인지 설정합니다.
5번째 행까지 스킵하고 6번째 행부터 읽어들이고 싶으면
skiprows=5 라고 하면 됩니다.
예시 코드
for cnt, chunk in enumerate(pd.read_csv(filename,
sep="|",
encoding='utf-8',
header=None,
names=['nt','v2','v3','gb3','gb2','ta_ym','daw_ccd_r',
'apv_ts_dl_tm_r', 'vlm', 'usec', 'v1'],
skiprows=2730000,
chunksize=chunksize)):
tosql(chunk)
print(cnt, "회 진행 중===")
저는 2,730,000 행까지 스킵하고
2,730,001 행부터 데이터를 읽어들이고 싶었습니다.
tosql()함수는 제가 지정한 함수에요.
위의 코드에서 for문의 chunk와 tosql(), print()의 의미는 아래 포스트에서 더 자세히 확인할 수 있습니다.
'데이터 분석' 카테고리의 다른 글
[SAS OnDemand for Academic] 클라우드 기반 SAS 체험하기 (0) | 2021.07.07 |
---|---|
[Pandas/Chunksize] 큰 용량 데이터 읽어오기 (0) | 2021.07.04 |
[LSTM/GRU] 주식가격 예측 모델 구현하기 (8) | 2021.06.01 |
[푸리에 변환] 신호 데이터 전처리 - Fast Fourier Transformation (1) | 2021.05.20 |
[Python/datatable] 용량 큰 csv파일 빠르게 읽기 (0) | 2021.05.20 |