はじめに と 結論
pythonでcsvを読み込むときにcsvのファイルの中身によっては「UnicodeDecodeError: ‘●●’ codec can’t decode byte」が発生してしまうことってありますよね。
しかも、特定の文字コードを指定してもまた別のUnicodeDecodeErrorが発生してしまう。
今回はこの地獄の連鎖を抜け出す方法を書きました。
結論から言うと、
「『pd.read_csv』で読み込んでみて、ダメなら『with codecs.open』を使ってみる」
です。
では、実際に僕が遭遇した例で見ていきましょう。
UnicodeDecodeError: ‘●●’ codec can’t decode byte ~~: illegal multibyte sequence地獄から抜け出す過程
まず、csvを読み込んでみました。file_pathのところでcsvファイルを指定します。
df = pd.read_csv(file_path)
そうしたら以下のようなエラー。
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 759: illegal multibyte sequence
ということでshift_jisにエンコードして読み込んでみる事にします。
df = pd.read_csv(file_path, encoding='shift_jis')
再度、試してみると、以下のようなエラー。
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 756: illegal multibyte sequence
なんでやねん。
なんなら幾つかのUni Codeでfor文回して成功するやつを見つけてやらぁ
for encoding in ['utf-8', 'shift_jis', 'iso-8859-1', 'windows-1252']:
try:
df = pd.read_csv(file_path, encoding=encoding)
print(f"{file} successfully read with encoding: {encoding}")
break # 成功したら次のファイルに進む
except Exception as e:
print(f"Failed to read {file} with encoding {encoding}: {e}")
今回の場合は、iso-8859-1で成功しました。
6月.csv successfully read with encoding: iso-8859-1
読み込んだcsvを見てみると、、、
_E[hµ½F2025/02/01 15:26:40 ... _E[hµ½F2025/02/01 15:26:17
0 ]ËìÕC ... NaN
1 _Ê(10ªä) ... NaN
2 NaN ... NaN
3 Ï¿Ô ... NaN
4 1 ... NaN
... ... ... ...
8827 NaN ... 1
8828 NaN ... 1
8829 NaN ... 1
8830 NaN ... 1
8831 NaN ... 1
[8832 rows x 12 columns]
文字化けしとる、、、。
なんでやねん。
ここで、以下を参考に、

pandasでread_csv時にUnicodeDecodeErrorが起きた時の対処 (pd.read_table()) - Qiita
pandasでCSVファイルを読み込む場合はread_csvするだけなので非常に便利です。import pandas as pdpd.read_csv("file/to/path")通常は上記…
以下のコードでcsvファイルを読み込んでみた。
with codecs.open(file_path, "r", "Shift-JIS", "ignore") as file:
df = pd.read_table(file, delimiter=",")
そしてたら、解決
さいごに
pd.read_csv
でダメなら
with codecs.open(file_path, "r", "Shift-JIS", "ignore") as file:
df = pd.read_table(file, delimiter=",")
にする。
これで解決。