pandas.errors.ParserError: Error tokenizing data の対処
結論を先に。このエラーは、read_csv が読んだファイルで行によって列の数が違う(または区切り文字が想定と違う)ために、表として組み立てられず失敗している状態です。正しい区切り文字を指定し、必要なら壊れた行をスキップすれば読めます。
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 8, saw 7原因
多くは次のどれかです。区切り文字がカンマでない(タブやセミコロン)、データ中にカンマや引用符が混ざって列数がずれる、ヘッダーより前に余計な行がある、複数のCSVが連結されて列数が一致しない。メッセージの「Expected N fields … saw M」が、どの行で何列ずれたかを教えてくれます。
対処
- まず区切り文字を正しく指定する。タブ区切りなら sep=“\t”。
import pandas as pddf = pd.read_csv("data.csv", sep="\t")- 引用符内にカンマが入るデータは、Python実装のパーサが頑健。
df = pd.read_csv("data.csv", engine="python")- どうしても壊れた行がある場合は、その行を飛ばして読む。
df = pd.read_csv("data.csv", on_bad_lines="skip")- 先頭に説明行があるなら skiprows で読み飛ばす。
df = pd.read_csv("data.csv", skiprows=2)まとめ
- 原因は行ごとの列数のずれ、または区切り文字の不一致
- メッセージの「line N, saw M」で問題行を特定する
- sep で区切り文字を正しく、engine=“python” で引用符混じりに対応
- 壊れた行は on_bad_lines=“skip”、余計な先頭行は skiprows