📉「pandasでCSVを読み込もうとしたらエラーが出た!」
🛠「行によって列数がバラバラでうまく読み込めない…」
こんなトラブルに直面した方向けに、この記事では以下を丁寧に解説します。
- よくあるpandas.errors.ParserErrorの原因
- 直接編集せずに読み込むためのPythonコード
- read_csvのパラメータ活用法
目次
❗ 発生したエラー:ParserErrorとは?
csvファイルのデータをPythonのpandasで読み込むときに以下のエラーとなってしまいはまりました。
pandas.errors.ParserError: Error tokenizing data. C error: Expected 24 fieldder._tokenize_rowss in line 4, saw 28
このエラーは、行と列のデータが不規則な場合に発生します。
列がやたら多いCSVデータで発生しました。
この記事では、エラーの一つ「pandas.errors.ParserError」の原因と具体的な解決方法について解説します。
✅ 原因:CSVファイルの構造不一致
- CSVの3行目までは24列なのに、4行目で28列ある
- ヘッダー行やコメント行などで形式が揃っていない
- 空欄やカンマの過不足など、人の手で編集されたCSVによくある問題
💡 解決方法:read_csvの「names」で先に列名を定義する
pandasのread_csv()
には、列名を手動で指定できるオプションがあります。これを使えば、列ズレを強制的に吸収できます。
import pandas as pd
# 仮に100列分の名前を先に用意
col_names = ['col_{}'.format(i) for i in range(100)]
# 列名を明示的に指定して読み込む
df = pd.read_csv('test.csv', names=col_names, engine='python')
print(df.head())
というわけで、PandasでCSVファイルが読み込めないときに、先に列名を作るとエラーを回避することができます。
✅ この方法のポイント
- 不揃いな行でも無理やり読み込める
- 不要な列は後で削除すればOK
- データが崩れてもエラーで止まらず確認できる
🔧 その他のread_csvオプションも活用しよう
パラメータ | 効果 |
---|---|
error_bad_lines=False (旧) | 読み込み時に異常な行をスキップ(※将来廃止予定) |
on_bad_lines='skip' (新) | 異常行スキップの新方式 |
engine='python' | 柔軟な読み込み(CエンジンではなくPython処理) |
skiprows=N | 最初のN行を読み飛ばす(ヘッダー飛ばしなどに便利) |
まとめ
トラブル内容 | 解決アプローチ |
---|---|
pandas.errors.ParserError | 列数の不一致による読み込みエラー |
解決法 | names で列名指定 / on_bad_lines='skip' の活用 |
備考 | エラー発生行を特定して直接修正 or ログ出力も有効 |
関連記事
記事タイトル | 説明 |
---|---|
Google Colaboratoryアップデート後のSeleniumエラー解決法:コードコピペで解決! | Google Colaboratoryのアップデート後に生じるSeleniumエラーの解決法を紹介します。 |
ChatGPTのCode InterpreterのCSVファイルの扱いについての注意点 | ChatGPTでPythonを使う際のCSVファイルの読み込みエラーの対策について説明します。 |
Python関連書籍
リンク
リンク