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')
>> UnicodeDecodeError: 'utf-8’ codec can’t decode byte 0x91 in position 1: invalid start byte
Unicodeのデコード(文字コードを文字に変換すること)エラーが出ました。
ちなみに文字を文字コードに変換することはエンコードといいます。
原因
パソコン内部では、文字をそのままの形で認識しているわけではなく、事前に個々の文字に割り当てた番号(文字コード)として取り扱っています。
文字コードには言語や番号の割り当て方の違いによって多くの方式があります。UTF-8は、どの言語で使えるように、世界標準の統一規格として設定されたUnicode用の符号化方式の1つです。
とはいえ、UTF-8も完全ではないようです(Wikipedia:日本語環境でのUnicodeの諸問題)
問題の原因となった文字はわかりませんがcsvファイルには日本語文字が含まれていたため、 日本語の文字コードとUTF-8とをうまく変換できていないことがUnicodeデコードエラーの原因になったと思われます。
解決策
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_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
- iso2022_jp_2004, iso2022_jp_2ext
- shift_jis, shift_jis _2004, shift_jisx0213
ただ、だいたいはメジャーどころの shift_jis か cp932 でうまく読み込めるようになっている印象です。
ディスカッション
コメント一覧
cp949 は韓国語ですね。
cp932 をお使いください。
引用
cp932 | 932, ms932, mskanji, ms-kanji | Japanese
cp949 | 949, ms949, uhc | Korean
ご指摘ありがとうございます。参照欄を間違えてcp949と記載していたようです。修正致しました。
あざます!解決しました!
助かりました