エラー内容
例えば、以下のようなエラーメッセージが表示される。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
'utf-8' codec can't decode byte 0x?? in position 0: invalid start byte
の文字通り、ファイルに含まれる特定の文字を utf-8 でデコードすることに失敗している。
原因
ファイルにshift-jisの文字列が含まれている状態で、文字コードをutf-8と誤認識して読み込もうとしたために発生する。windowsで作成されたファイルの場合はcp932の場合もある。 オプションで正しい文字コードを指定することで回避できる。
解決法
解決法1:オプションで指定
shift-jis
の場合
import pandas as pd df = pd.read_csv("filename.csv", encoding="shift-jis")
cp932
の場合
Windowsで作成されたファイルはcp932
を指定すると読み込めるようになることがある。
import pandas as pd df = pd.read_csv("filename.csv", encoding="cp932")
このような文字コードエラーを避けるために、保存時には utf-8-sig
で保存しておく。
utf-8
でも良いが、Windowsのエクセルでファイルを開いたときに日本語が文字化けする場合があるので注意する。
df.to_csv("filename.csv", encoding="utf-8-sig")
他の指定可能な文字コード一覧は以下のドキュメントに記載されている。
7.8. codecs — Codec registry and base classes — Python 2.7.18 documentation
ただ、英語と日本語以外の言語を使用していない場合は、
cp932
utf-8
,utf-8-sig
shift-jis
iso2022_jp
euc_jp
以外はほとんど使わないように思います。
解決法2:エラーを放置してshift-jisに変換
import codecs as cd import pandas as pd with cd.open("filename.csv", "r", "Shift-JIS", "ignore") as csv_file: df = pd.read_table(csv_file) print('df:', df.shape)