Pythonでデータ分析を行う際に、PandasでCSVファイルを読み込むコードを書くことがよくあります。しかし、特定のエンコードが原因でエラーが発生することもあります。今回は、特に日本語のテキストを含むファイルを読み込む際によく遭遇する UnicodeDecodeError
について、その原因と解決方法を解説します。
目次
エラーの内容
以下のコードを実行した際に、UnicodeDecodeError
が発生しました。
Python
df = pd.read_csv(csv_file_path, encoding='shift-jis', on_bad_lines='skip', names=("date", "place", "category", "payment_method", "amount"))
エラーメッセージは次のようなものでした。
ShellScript
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xfb in position 57617: illegal multibyte sequence
このエラーは、日本語を含むCSVファイルを読み込む際に、shift_jis
エンコードで解釈できないバイトが含まれているために発生しています。
対処方法
このエラーを回避するためには、ファイルがどのエンコードで保存されているかを正確に指定する必要があります。以下のコードは、cp932
エンコードを指定してファイルを読み込む方法です。
Python
df = pd.read_csv(csv_file_path, encoding='cp932', on_bad_lines='skip', names=("date", "place", "category", "payment_method", "amount"))
cp932
は、Windowsで一般的に使われる日本語エンコードであり、このエンコードを使用することで、エラーなくデータを読み込むことができます。
まとめ
UnicodeDecodeError
は、異なるエンコードで保存されたファイルを誤ったエンコードで読み込もうとした際に発生する一般的なエラーです。日本語のCSVファイルを読み込む際には、shift_ji
だけではなく、cp932
を試してみると良いでしょう。