본문 바로가기
Programming/Python

[Pandas] UnicodeDecodeError: 'utf-8' codec can't decode byte 해결방법

by a voyager 2022. 4. 13.
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
반응형

댓글