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」が、どの行で何列ずれたかを教えてくれます。

対処

  1. まず区切り文字を正しく指定する。タブ区切りなら sep=“\t”。
import pandas as pd
df = pd.read_csv("data.csv", sep="\t")
  1. 引用符内にカンマが入るデータは、Python実装のパーサが頑健。
df = pd.read_csv("data.csv", engine="python")
  1. どうしても壊れた行がある場合は、その行を飛ばして読む。
df = pd.read_csv("data.csv", on_bad_lines="skip")
  1. 先頭に説明行があるなら skiprows で読み飛ばす。
df = pd.read_csv("data.csv", skiprows=2)

まとめ

  • 原因は行ごとの列数のずれ、または区切り文字の不一致
  • メッセージの「line N, saw M」で問題行を特定する
  • sep で区切り文字を正しく、engine=“python” で引用符混じりに対応
  • 壊れた行は on_bad_lines=“skip”、余計な先頭行は skiprows