반응형
pandas에서 read_csv 해서 csv 파일을 읽을 때 아래와 같은 오류를 볼 수 있다.
Error tokenizing data. C error: Expected ...
오류 내용을 보니 예상되는 필드는 12개여야하는데 9437라인에서 17개가 된다고 보인다.
오류 원인
- 쉼표로 분리될 때 각 라인마다 분리되는 개수가 달라서 발생하는 것이다.
해결하기 전에 분리될 때 개수가 정말 다른지 확인을 해보면 된다.
<분리 개수 확인 코드>
from collections import Counter
with open(file_path, encoding="utf-8") as f:
lines = f.readlines()
print(len(lines))
len_list=[]
for _ in range(len(lines)):
print(str(_)+":"+str(len(lines[_].split(','))))
len_list.append(len(lines[_].split(',')))
Counter(len_list)
Counter함수를 이용해서 각 라인별로 콤마로 분리된 개수를 세어보았다.
총 25,038 개의 데이터인데, 12~24개까지 분리되는 경우가 있었다.
해결 방법
csv 패키지를 import하고, csv 파일을 읽은 후에 pandas DataFrame으로 만들어버리는 방법이다.
import csv
import pandas as pd
f=open(file_path, encoding="utf8")
reader = csv.reader(f)
csv_list=[]
for l in reader:
csv_list.append(l)
f.close()
log_df = pd.DataFrame(csv_list)
log_df
파일을 읽고 list에 append 시킨 후, 해당 리스트를 DataFrame에 넣어주면 오류 없이 데이터프레임이 생성되는 것을 확인할 수 있다.
<output>
반응형
'Python' 카테고리의 다른 글
Python Jinja2에서 If문 사용하는 방법 (0) | 2021.09.16 |
---|---|
python jinja2 template 변수 선언하기 (0) | 2021.09.16 |
[Python] 리스트를 문자열로 변환하기(python list to string) (0) | 2021.08.14 |
[Python] 파이썬으로 순열, 조합, 중복 순열 생성하기(itertools library) (0) | 2021.08.11 |
[Python] 'cp949' codec can't decode byte 0xec : illegal multibyte sequence (UnicodeDecodeError) (0) | 2021.08.03 |
댓글