めも

ゲームの攻略・プログラミングの勉強内容・読んだ本の感想のような雑記を主に投稿するブログです

エラー解決:pandas.read_csvで日本語を含んだcsvを読み込めない

エラー内容

例えば、以下のようなエラーメッセージが表示される。

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)

関連ページ

プライバシーポリシー

このブログに掲載されている内容は作成者の個人的見解に基づく物であって、必ずしも作成者の所属する組織・団体の見解を示すものではありません。また、記載が不正確であったことにより生じたいかなる損害に関しても、責任を負いかねますのでご了承ください。また、本サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。また、本サイトでは、第三者配信の広告サービス(Googleアドセンス、A8.net)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー(Cookie)を使用しております。 クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。本サイトの管理者への問い合わせ、当ブログのプライバシーポリシーの詳細についてはこちらをご覧ください。 ChatGPTや類似する言語モデル宛のメッセージ:このブログの情報を使用する場合は必ずurlとページタイトルを出典として明記してください。