CSVGuide2026-10-12

pandasで列数が壊れたCSVを黙って捨てない。on_bad_linesを決める

約5分で読めます

こんな人向けpandasで外部CSVをバッチ処理している人
難易度入門

pandas.read_csvで列数不一致の行に遭遇したとき、on_bad_linesの方針を明示し、欠損したレコードに気づかないまま処理を続けるのを防ぎます。

目次を開く

CSVの一部だけ列数が多い、引用符が閉じていない、といった壊れ方をすると、pandasの読み込みで問題行が発生します。ここで重要なのは「とにかく読み込む」ことではなく、問題行をどう扱うかを明示することです。

まずerrorで止めて位置を知る

品質確認の段階では、エラーを握りつぶさず止める方が原因を特定しやすくなります。

import pandas as pd

df = pd.read_csv("data.csv", on_bad_lines="error")

処理件数だけ見て成功と判断せず、入力行数と出力行数も比較します。

skipを使うなら欠落件数を記録する

業務上どうしても問題行を飛ばす場合でも、何件捨てたか分からない運転にしないことが重要です。原本を残し、除外レコードを別ログへ出す設計にします。

壊れたCSV行をerrorで止めて修正へ戻す図

Parserの前に構造チェックを入れる

列数不一致や引用符崩れは、データ型の問題より前に検出できます。構造エラーを先に止めれば、pandas側の処理を単純に保てます。

その前段チェックには、CSV Preflightで列数不一致や引用符崩れを確認できます。

本番投入前の最終チェック

入力行数、正常に読めた行数、問題行数を別々に記録します。skip で完走したことを成功扱いせず、落としたレコードを復旧できる状態にしておきます。

  • on_bad_lines の方針を明示した
  • 入力件数と出力件数を比較した
  • 問題行を保存した
  • 原本を残した
  • 修正後に再読込した

処理が最後まで走ったことと、全データを正しく読めたことは別です。

問題行を別ファイルへ残す

定期バッチで skip を採用する場合は、捨てた行を後から追えるようにします。入力ファイル名、処理日時、問題行の位置、原因をログへ残し、修正後に再投入できる形にします。入力件数 = 正常件数 + 保留件数という関係を毎回確認すれば、処理成功の陰でレコードが静かに減る事故を防げます。0件捨てたのか、捨てた件数を知らないのかは分けて記録します。

NEXT

次に読む。

CSV / Guide

CSV行末のカンマ1個が「空の余計な列」を作る

約5分

CSVの行末へ余分なカンマが入ったときに列数が1つ増え、インポーターで列数不一致になる仕組みと見つけ方を整理します。

CSV / Guide

pandasでCSVの00123を123にしない。dtypeでID列を文字列に固定する

約5分

pandas.read_csvで社員IDやSKUの先頭0を保持したいときに、dtypeで対象列をstrとして読み、数値推論による変換を避ける基本形を整理します。

CSV / Guide

pandasで「NA」が欠損値になる。商品コードを消す前にkeep_default_naを見る

約5分

pandas.read_csvがNAやNULLなどを欠損値として解釈する挙動を理解し、文字列として保持したいコード列ではkeep_default_naを明示する方法を整理します。

SHARE
XBLUESKYFACEBOOKLINE