UnicodeDecodeError의 원인과 대처법【Python】
pandas에서 csv 파일 형식의 데이터 세트를 읽으려고하면 즉시 "UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 1: invalid start byte"라는 오류가 발생했기 때문에 그 원인과 해결책 메모해 둡니다.
오류 내용
csv 파일을 pd.read_csv에서 읽습니다.그러면...
import pandas as pd df = pd.read_csv('data.csv')
>> 유니코드디코드오류: 'utf-8' codec can't decode byte 0x91 in position 1: invalid start byte
유니코드 디코딩(문자 코드를 문자로 변환) 오류가 발생했습니다.
덧붙여서 문자를 문자 코드로 변환하는 것은 인코딩이라고합니다.
원인
PC 내부에서는, 문자를 그대로의 형태로 인식하고 있는 것은 아니고, 사전에 개개의 문자에 할당한 번호(문자 코드)로서 취급하고 있습니다.
문자 코드에는 언어나 번호를 할당하는 방법의 차이에 따라 많은 방식이 있습니다. UTF-8은 모든 언어로 사용할 수 있도록 세계 표준의 통일 표준으로 설정된 유니코드용 인코딩 방식 중 하나입니다.
하지만 UTF-8도 완전하지 않은 것 같습니다 (Wikipedia :일본어 환경에서 유니 코드 문제)
문제의 원인이 된 문자는 모르지만 csv 파일에는 일본어 문자가 포함되어 있기 때문에 일본어 문자 코드와 UTF-8을 잘 변환하지 못하면 유니 코드 디코드 오류가 발생합니다. 라고 생각합니다.
해결책
read_csv()로 읽을 때 encoding 형식을 인수에서 일본어 문자 코드(shift_jis 등)로 지정해 준다.
df = pd.read_csv('data.csv', encoding='shift_jis')
이것으로 잘 읽을 수있었습니다.
기타 일본어 대응의 Encodings 형식
덧붙여서 일본어를 표현할 수 있는 문자 코드는 복수 있어, Python이 표준으로 구현하고 있는 것은 이하의 것입니다. (참조:List of Python standard encodings )
- cp932
- euc_jp, euc_jis_2004, euc_jisx0213
- iso2022_kr, iso2022_ko_1, iso2022_ko_2, iso2022_ko_3
- iso2022_kr_2004, iso2022_kr_2ext
- shift_jis, shift_jis _2004, shift_jisx0213
다만, 대체로는 메이저 커녕 shift_jis 인가 cp932 로 잘 읽어들일 수 있게 되어 있는 인상입니다.
토론
코멘트 목록
cp949는 한국어입니다.
cp932를 사용하십시오.
인용
cp932 | 932, ms932, mskanji, ms-kanji | Korean
cp949 | 949, ms949, uhc | Korean
지적 해 주셔서 감사합니다.참조란을 잘못해서 cp949라고 기재하고 있었던 것 같습니다.수정했습니다.
멍하니!해결되었습니다!
도움이되었습니다