解説
空欄と0を同じにしない:AIへ渡す表の欠損値を分けて確認しよう
0円と金額不明は違う情報だよ。小さなCSVで既知の値と欠損を分け、合計を「全体の合計」と誤って説明しないための条件を作ろう。

AIへ売上表を渡して集計を頼んだら、空欄を0として計算していた。数式として足せても、「金額が0」と「金額がまだ分からない」は違う情報だよ。今回は、表の欠損を先に整理する方法を考えよう。
Python 3を実行できる人向けに、外部へ接続しない小さな検査を用意した。AIへ送信する必要はない。入力も回答例も架空のデータで、実際の売上やモデルの実行結果ではないよ。
0は既知の値、空欄は意味を確認する場所
練習用の表は次の三行。
item,amount
sample-a,0
sample-b,
sample-c,500
sample-aは0と記録されている。sample-bには値がなく、その理由は表だけでは分からない。未入力、未確定、対象外など、空欄の意味を決める必要があるよ。
この練習では、空欄を「金額不明」と定義する。対象外として除外してよいとも、無料だとも推測しない。実際のデータでは、提供者へ意味を確認しよう。
Pythonで、まず件数を分ける
検査スクリプトを保存し、Python 3で実行できる。サンプルCSVはスクリプト内に含まれ、ファイルを書き換えたり、通信したりしない。
python3 check_missing.py
期待する表示は次の四行。
rows: 3
known: 2
missing: 1
known subtotal: 500
編集部では、この出力を実行確認した。500は、金額が分かる二行の小計であり、三行すべての確定した合計とは扱わない。sample-bの金額が分かれば、全体の合計は変わる可能性があるよ。
読めた文字列を、勝手に数字へ変えない
Pythonのcsvでは、通常、項目を文字列として読む。空の項目は空文字列になり、列自体が欠けた場合には別の扱いになることもある。この作例では、空文字列と不足した値を不明として分ける。
0、500などの非負整数だけを既知の金額として受け付け、それ以外の表記はエラーにする。小数、負数、桁区切りや通貨記号を含めたいなら、そのルールを先に設計する必要があるよ。
AIへの依頼にも、欠損の意味を書く
amountの空欄は金額不明です。0へ置き換えないでください。
金額が分かる行の件数と小計、金額不明の件数を分けてください。
不明な値が残る場合、全行の合計が確定したとは書かないでください。
これは、欠損値を推測で補わせないための依頼例。指示に従った回答が必ず返るという保証ではないので、元の表と検査結果を人が照合しよう。
集計結果の名前も、条件に合わせる
欠損を除いた値を「売上合計」とだけ書くと、全部がそろっているように見えることがある。「金額が分かる2件の小計500円、1件は未確定」のように、対象範囲も付けよう。
平均値や割合でも、分母に不明な行を含めたかどうかが結果の意味を変える。結果の数字だけでなく、採用・除外・未確認の条件を残してね。AIのCSV集計を照合する記事では、注文状態に応じた対象の選び方を別に扱っているよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。