728x90
반응형
증상
Pandas api로 csv파일을 읽을 때, 다음과 같은 UnicodeDecodeError가 날 수 있다.
df = pd.read_csv('test.csv')
이 에러는 읽어드릴 파일의 포맷이 UTF-8이 아니기 때문에 발생한다.
해결
위의 pandas.read_csv 함수를 보면 encoding/encoding_errros이란 변수가 있고, 이것들의 디폴트는 각각 None과 strict이다. 이 변수값을 따로 지정해주면 에러를 해결할 수 있다.
두 가지 방법이 있다.
1. 인코딩 에러를 무시하는 방법 (encoding_errors='ignore')
첫번 째 방법은 이 에러를 무시하는 것이다. 다음과 같이 encoding_errors를 ignore로 하면 해결할 수 있다.
df = pd.read_csv('test.csv', encoding_errors='ignore')
2. 인코딩 포맷을 찾아서 해결하는 방법
두 번째 방법은 csv파일의 포맷을 찾아서 read_csv에 알려주는 것이다.
이것은 chardet이란 모듈을 이용한다. 모듈이 없으면 다음과 같이 설치할 수 있다.
pip install chardet
# or
conda install chardet
설치를 하고 다음과 같이 실행해보자.
import chardet
with open('test.csv', 'rb') as rawdata:
result = chardet.detect(rawdata.read(10000))
# check what the character encoding might be
print(result)
73%의 확률로 ISO-8859-1 포맷이라고 알려준다. 100%가 아닌 이유는 파일의 첫 1만 개의 bytes만으로 판단을 했기 때문이다. 이 정도만으로도 포맷을 특정 짓기에 충분하다.
그러면 ISO-8859-1포맷으로 파일을 읽어보자. encoding이 일치한다면 에러 없이 파일을 읽을 것이다.
No errors!!!
728x90
반응형
'Programming > Python' 카테고리의 다른 글
[Python] Conda 가상환경을 다른 컴퓨터로 옮기기 (ft. 윈도우 버전) (0) | 2022.05.04 |
---|---|
[Python] Pandas groupby 결과를 list의 dictionary로 바꾸기!! (0) | 2022.05.02 |
[Python] 압축 파일(zip) 다루기 (ft. 압축 풀지 않고 데이터 읽기) (0) | 2021.06.14 |
[Python] pandas 파일 로딩 속도 비교 (CSV vs. Pickle 포맷) (0) | 2021.06.02 |
[Python] Pandas 'settingWithCopyWarning' 경고 메세지 없애기 (0) | 2021.05.09 |
댓글