目次を開く
CSVのセルに文字列として NA と入っているのに、pandasで読んだら欠損値になった。これは壊れたCSVではなく、read_csv が既定で複数の文字列を欠損値として認識するために起きます。
NAを文字列として残すなら設定する
read_csv には keep_default_na があります。既定の欠損表現を自動適用したくない場合は、用途に合わせて明示します。
import pandas as pd
df = pd.read_csv("items.csv", keep_default_na=False)
商品コードや国コードなどで NA 自体が意味を持つなら、欠損値と文字列を区別する設計が必要です。
空欄との違いも先に決める
""、空セル、NA、NULL を全部同じ欠損として扱うのか、それぞれ別の値にするのかを決めます。読み込み後に混ざってから直すより、入口で決めた方が安全です。
読み込み条件をコードに残す
GUIで毎回判断するのではなく、dtype、keep_default_na、encoding などを処理コードへ残します。次回も同じ条件で再現できます。
CSVそのものの必須値抜けや列数不一致を前段で確認するなら、CSV Preflightを使えます。
本番投入前の最終チェック
入力CSVに本当に NA や NULL という有効値があるかを先に確認し、欠損の仕様を決めます。読み込み後は有効値の件数と欠損件数を比較して、意図しない変換がないかを見ます。
- 欠損として扱う文字列を決めた
keep_default_naの方針をコード化した- 有効値
NAの件数を前後比較した - 空欄の意味を固定した
- 原本を残した
データ型だけでなく、欠損の意味そのものを入口で決めるのが安全です。