解説
00123を123に変えない:AIへCSVのIDを渡す前に文字列を保とう
数値に見えるIDでも先頭の0には意味がある。架空のCSVをPythonで読み、文字列のまま保つ場合と整数へ変換した場合の違いを確認。

AIへCSVの一覧を整理してもらったら、IDの00123が123へ変わっていた。計算するための数なのか、記録を見分ける文字列なのかを、先に分けよう。
今回は架空の二件だけを使う。Pythonの例を実行しなくても、表から違いを読めるよ。実際の利用者の番号や郵便番号は使わない。
数字だけでも、足し算する値とは限らない
| 原文のID | この練習での扱い |
|---|---|
| 00123 | 一つ目の記録を見分ける文字列 |
| 123 | 別の記録を見分ける文字列 |
この例の仕様では、二つを別のIDとして扱う。数字だけで書かれていても、量や金額のような計算用の数とは違うんだ。
元のシステムが同じIDとして定義している場合もあり得るので、どちらが正しいかは仕様を確認する。見た目だけで、勝手にそろえないようにしよう。
CSVを文字列として読む例
import csv
import io
source = "id,name\n00123,りん\n123,そら\n"
rows = list(csv.DictReader(io.StringIO(source)))
print([row["id"] for row in rows])
print([int(row["id"]) for row in rows])
最初の表示は['00123', '123']。この読み方では値を文字列のまま保持している。次の整数への変換では[123, 123]となり、先頭の0という違いを失う。
Pythonのcsv.readerは、通常は各項目を文字列として返し、自動的な数値変換をしない。DictReaderも列名で値を参照するための読み方で、今回のIDは文字列のままだよ。
あとから0を足せば戻る、とは限らない
元が00123だったのか、0123だったのか、123だったのか。整数123だけからは、元の桁数を特定できない。
「5桁へそろえる」という正式なルールがある場合の処理と、失った情報を推測して戻すことを分けよう。郵便番号や商品コードなども、使う国・システムの仕様を確認する必要があるね。
AIへ渡すときの条件を明示する
id列は計算する数ではなく、記録を識別する文字列です。
先頭の0、桁数、原文の表記を保持してください。
00123と123を勝手に統合しないでください。
変更が必要そうな値は原文を残して別欄へ挙げ、推測で補正しないでください。
この依頼だけで、出力が必ず守られるとは限らない。出力後にIDを原文と文字列として照合し、件数と重複が変わっていないかを確認しよう。
表計算ソフトへ取り込む場合も確認する
CSV自体は区切ったテキストだけれど、開く側のソフトが値を数値や日付と解釈することがある。保存後の見た目だけでなく、取り込み時の列の型や、再出力した値も確認したいね。
練習では原文を別に残し、取り込み・AIへの依頼・書き出しのどの段階で変わったかを順に見よう。元ファイルを上書きしなければ、比較し直しやすいよ。

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