2.3.2
read_csvで列数が合わずParserErrorになる
まとめ
pd.read_csv()で列数不一致によるParserErrorを解決する。sep・quotechar・on_bad_lines引数で区切り文字や引用符の扱いを調整する。- CSVがタブ区切りやセミコロン区切り、セル内にカンマや改行を含むときに参照する。
pandas.read_csv() で次のようなエラーに遭遇したことはありませんか?
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 12, saw 7
あるいは
pandas.errors.ParserError: ',' expected after '"'
といったメッセージです。これは 区切り文字や引用符の扱いが想定と違う ときに起こります。
主な原因は次のパターンです。
- CSV がタブ区切り (
\t) やセミコロン区切り (;) だった - 1列内にカンマが含まれていて、引用符で囲まれていなかった
- エスケープ文字がなく、ダブルクオートが途中で途切れている
解決法 1: 区切り文字を正しく指定する #
| |
ファイルの先頭数行を head -n やメモ帳で確認し、実際の区切り文字を把握してから sep= を設定しましょう。
解決法 2: 引用符とエスケープを合わせる #
| |
Excel から書き出した CSV では セル内のカンマ や 改行 が混入していることがあります。
引用符 (quotechar) を明示し、バックスラッシュなどでエスケープされている場合は escapechar も指定します。
解決法 3: Python エンジンで柔軟に解析する #
標準の C エンジンでは扱えない複雑なパターンも engine="python" へ切り替えると読み込めることがあります。
| |
on_bad_lines="skip"にすると崩れた行を無視できます。
データ損失を防ぎたい場合はwarnにしてログだけ取り、後で該当行を手動で修正しましょう。
チェックリスト #
- 区切り文字 は想定通りか (
sepを設定したか) - セル内カンマ・改行 がある列には適切な引用符が付いているか
- Excel 等で書き出す際、CSV UTF-8 (カンマ区切り) 以外を選んでいないか
- 破損行がある場合は
on_bad_linesでログを出しながら再確認したか