Python の pandas.read_csv() を使って日本語を含む CSV ファイルを読み込もうとすると、
次のような UnicodeDecodeError が発生することがあります。たとえば
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
といった内容です。このようなエラーは、ファイルの文字コードと読み込み指定が一致していないときに発生します。
特に Windows で作成された CSV ファイルは cp932(Microsoft独自拡張Shift-JIS)で保存されていることが多く、
そのようなファイルを utf-8 で読み込もうとするとエラーになりやすいです。
解決法:正しいエンコーディングを指定して読み込む #
Shift-JIS の場合 #
import pandas as pd
df = pd.read_csv("filename.csv", encoding="shift-jis")
CP932(Windows環境で一般的)の場合 #
import pandas as pd
df = pd.read_csv("filename.csv", encoding="cp932")
保存時の推奨設定 #
将来的に文字化けや読み込みエラーを避けるため、
保存時は UTF-8-SIG(BOM付きUTF-8)で出力しておくと安全です。
df.to_csv("filename.csv", encoding="utf-8-sig")
⚠️
utf-8でも問題ありませんが、WindowsのExcelで開くと文字化けすることがあります。utf-8-sigはその対策になります。
🔠 よく使う文字コード一覧 #
| 文字コード | 用途・説明 | 
|---|---|
utf-8 | 最も一般的なUnicodeエンコーディング | 
utf-8-sig | BOM付きUTF-8(Excel互換性が高い) | 
shift-jis | 日本語Windowsでよく使用される文字コード | 
cp932 | Microsoft拡張Shift-JIS(ExcelやNotepadで作成される) | 
euc_jp | UNIX系環境で使用される日本語文字コード | 
iso2022_jp | 古いメールシステムなどで使用されることが多い |