
「このCSVを月別に集計して」と頼んだのに、合計が合わない。AIの計算を疑う前に、日付が文字列になっていないか、空欄をゼロとして扱っていないかを見てみましょう。同じ列の中で意味が揺れていると、集計の前提も揺れます。
ここでは、架空の発送記録4件を使って、整理前と整理後を比べます。実在する顧客や売上のデータではありません。
見た目は読めても、集計の条件が決まっていない
次のCSVをコピーして確認できます。金額のカンマを列の区切りと混同しないよう、該当する値をダブルクォートで囲んでいます。
伝票ID,発送日,送料,重量
S001,2025/10/01,"1,200円",500g
S002,10月2日,未確定,0.75kg
S003,2025-10-03,0円,1000g
S004,10/04,,
人なら「10月2日も同じ年だろう」と補ってしまうかもしれません。しかし、年のない日付は確認が必要です。「10/04」も、書式によっては10月4日にも4月10日にも読めます。送料の0円、未確定、空欄も、同じ意味とは限りません。
元の記録を確認してから、列の意味を固定する
この例では、元の伝票で全件が2025年10月の記録と確認できたものとします。また、S003は送料無料、S002は見積もり待ち、S004は入力漏れです。これらはAIの推測ではなく、整理する人が確認して与える条件です。
shipment_id,shipped_on,shipping_fee_jpy,fee_status,weight_g
S001,2025-10-01,1200,confirmed,500
S002,2025-10-02,,pending,750
S003,2025-10-03,0,confirmed,1000
S004,2025-10-04,,missing,
重量はgに統一し、0.75kgを750gへ換算しました。送料は円記号を外し、列名で単位を示しています。未確定と入力漏れは、金額を空欄にしたまま別の列に理由を残しました。
このCSVで使う約束は次のとおりです。CSV自体が、空欄の意味や日付の型を決めてくれるわけではありません。
- shipped_on:確認済みの発送日。YYYY-MM-DD形式。
- shipping_fee_jpy:送料の円額。0は確認済みの無料。空欄は金額不明。
- fee_status:confirmedは確定、pendingは未確定、missingは入力漏れ。
- weight_g:重量をgで記録。空欄は未入力。
整理後に初めて答えられること
確定済み送料はS001の1,200円とS003の0円で、合計1,200円です。確定した2件の平均は600円。S002とS004も含めて4件で割った300円は、「確定済み送料の平均」にはなりません。
重量が分かる3件の合計は2,250gです。4件目の重量がないため、「4件すべての総重量」とは書けません。集計値と一緒に、対象件数と除外件数を出すと、数字の意味を確かめやすくなります。
そのまま使える依頼文
次のCSVを集計してください。
空欄を0で埋めず、不明な値を推測しないでください。
送料はfee_statusがconfirmedの行だけを対象に、
合計・平均・対象件数を出してください。
pendingとmissingの件数は別に示してください。
重量は入力済みの行の合計と件数を示してください。
結果には、対象のshipment_idと計算式を添えてください。
日付や単位に矛盾があれば、計算より先に指摘してください。
保存し直したCSVも確認する
表計算ソフトで開き直すと、日付の見え方や先頭のゼロが変わることがあります。商品コードや伝票番号は数値ではなく識別子として扱い、取り込み時に文字列の列として指定します。元ファイルを残し、書き出したCSVの行数、見出し、空欄、単位を最後に確認してください。
AIに渡す前に必要なのは、すべてのセルを埋めることではありません。分かる値と分からない値を、区別できる表にすることです。
参考:CSVの区切りや引用符の扱いは、RFC 4180に記載されています。空欄や単位の扱いは、利用する表ごとに定義します。
オリジナル記事、著者:AIの番人,転載の際には、出典を明記してください:https://nipponai.jp/article/ai%e3%81%ab%e8%a1%a8%e8%a8%88%e7%ae%97%e3%82%92%e9%a0%bc%e3%82%80%e5%89%8d%e3%81%ab%ef%bc%9acsv%e3%81%ae%e7%a9%ba%e6%ac%84%e3%83%bb%e6%97%a5%e4%bb%98%e3%83%bb%e5%8d%98%e4%bd%8d%e3%82%92%e6%95%b4/