目次を開く
CSVに 00123 と入っていても、pandasが数値列だと推論すれば、後工程で 123 として扱われることがあります。社員ID、SKU、郵便番号のような値は計算する数字ではなく識別子なので、読み込み時に型を決める方が安全です。
dtypeで対象列をstrにする
read_csv には列ごとの型を指定する dtype があります。
import pandas as pd
df = pd.read_csv("users.csv", dtype={"employee_id": str})
これで employee_id を数値ではなく文字列として扱えます。
読み込んだ直後に値と型を確認する
画面表示だけではなく、先頭数件とdtypeを確認します。
print(df["employee_id"].head().tolist())
print(df.dtypes)
期待値が ["00123", "00456"] なら、そのまま保持できているかをここで確認できます。
書き出す前にも型を再確認する
途中で数値演算や結合をした結果、型が変わることもあります。to_csv の直前でID列を再確認し、原本CSVも残しておきます。
構造上の列数不一致、ヘッダー重複、引用符崩れをPython処理前に見るなら、CSV Preflightを前段に置けます。
本番投入前の最終チェック
原本、読み込み条件、出力CSVを分けて保存し、代表IDを前後比較します。先頭0を守れても、別列の欠損値変換や型推論で値が変わっていないかも確認します。
dtypeをコードに残した- 代表IDの前後一致を確認した
- 行数が変わっていない
- 出力直前のdtypeを確認した
- 元CSVを保存した
読めたことではなく、識別子が同じ文字列で残ったことを完了条件にします。