MENU

CSVのNAと空欄を分ける|pandasの欠損値設定

当ページのリンクには広告(PR)が含まれていることがあります。
CSVのNAと空欄を分ける|pandasの欠損値設定。NA と空欄、欠損の指定、意味を分けるの処理例。

商品コードNAが空欄と同じ扱いになるなら、読み込み時の欠損値設定を確認します。pandasではNAなどの文字列が既定で欠損値として解釈されます。数量の未入力を探すには便利でも、NAというコードが実在する一覧では区別が必要です。

文字列型を指定すればすべて残る、というわけでもありません。列の型と欠損値の認識は別の設定です。既定の欠損表現を止めたうえで、その列で空欄とする値だけを指定します。

目次

NAと空欄を並べて読む

次の架空CSVには、NA、空欄、A01の三つのコードがあります。既定の読み方と、空文字だけを欠損とする読み方を比べます。StringIOを使うので、練習用ファイルは要りません。

from io import StringIO
import pandas as pd

text = "コード,数量\nNA,1\n,2\nA01,3\n"
default = pd.read_csv(
    StringIO(text), dtype={"コード": "string"}
)
specified = pd.read_csv(
    StringIO(text),
    dtype={"コード": "string"},
    keep_default_na=False,
    na_values={"コード": [""]},
)
print("既定の欠損判定:", default["コード"].isna().tolist())
print("指定後の欠損判定:", specified["コード"].isna().tolist())
print("確認用表示:", specified["コード"].fillna("(空欄)").tolist())
assert specified["コード"].iloc[0] == "NA"
assert specified["コード"].isna().tolist() == [False, True, False]

既定では最初の二件が欠損になります。指定後は二件目だけが欠損になり、NAは文字として残ります。fillnaは最後の確認用表示だけに使っており、読み込んだ表の欠損値を一律に書き換える処理ではありません。

掲載コードはWindows・Python 3.12.10・pandas 3.0.2で実行し、この三件の判定を確認しました。実ファイルへ移すときも、NAがある行と本当の空欄がある行を含む小さな入力から比べると、設定の意味を追えます。

空文字と空白文字を混ぜない

この指定で欠損にするのは空文字です。半角スペースだけの値や、全角スペース、ハイフンなどを自動で同じ意味にはしていません。

入力元が未入力をスペースで出すなら、前後の空白を取るのか、そのまま不正値として返すのかを決めます。コードの前後に空白が意味を持つ仕様も考えられるため、表全体へ無条件にstripをかける前に、列の定義を確かめてください。

na_valuesには列ごとの辞書を渡せます。「コード」の空文字は欠損、「備考」のNAはそのまま、というように、意味が異なる列を分けて扱えます。入力元がNULLや未設定という文字も使うなら、その語を欠損と認める根拠を確認してから追加します。

欠損の件数を処理前に残す

コードが欠損した行は、マスターとの照合へそのまま流さず、行を特定できる番号とともに確認へ回します。欠損を空文字や0へ置き換えて続けると、入力の不備を見つけにくくなります。

一方、数量の空欄を0と数えるかどうかは別の判断です。コード列の欠損ルールを整えたことで、数量や日付まで正しいと判断しないようにします。読み込み前後で総件数と列ごとの欠損件数を比べると、意図しない解釈にも気づけます。

文字列や数値の読み込みはpandas入門、空欄のある数値を合計・平均するときの違いはCSV集計の基本へつながります。

設定の確認先

pandas.read_csv公式資料のdtype、keep_default_na、na_valuesを確認しました。資料確認日は2026年11月1日です。欠損を何とみなすかは入力元の仕様に合わせて決めてください。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次