pythonの「UnicodeDecodeError: ‘●●’ codec can’t decode byte」で困っているあなたへ

スポンサーリンク
エラー
スポンサーリンク

はじめに と 結論

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=",")

にする。

これで解決。

タイトルとURLをコピーしました