はじめに
EC運用や商品管理をしていると、商品コード・SKU・JANコードなど、先頭に 0 が入るデータを扱うことがあります。
例えば、次のようなコードです。
00123
000456
0123456789012
人間にとっては「商品コード」ですが、ExcelでCSVを開くと数値として解釈されてしまい、先頭の 0 が消えることがあります。
00123 → 123
000456 → 456
いわゆる「0落ち」です。
見た目には小さな違いですが、商品登録や売上集計では別の商品として扱われたり、照合できなくなったりするため、かなり危険です。
何が困るのか
CSVをExcelで直接開いた場合、Excel側が気を利かせて自動的に型を判定します。
その結果、本来は文字列として扱いたい商品コードが、数値として扱われてしまいます。
例えば、商品コード 00123 と 123 は、人間から見ると似ていますが、システム上はまったく別の値です。
ECモールの商品データや売上データでは、商品コードやSKUをキーにして集計・照合することが多いため、ここが壊れると後工程に影響します。
原因
原因はシンプルで、ExcelがCSV内の値を自動判定しているためです。
CSV自体には「この列は文字列です」という情報が基本的にありません。
そのため、Excelが開いた時点で、
00123
を
123
という数値として扱ってしまうことがあります。
Excelの親切心が、現場ではたまにトラップになります。
対策としてやったこと
今回は、CSVをExcelで直接加工するのではなく、Pythonで読み込み、商品コードやSKUなどの列を文字列として扱うようにしました。
シンプルな例です。
import pandas as pd
input_file = "input.csv"
output_file = "output.csv"
df = pd.read_csv(
input_file,
dtype={
"商品コード": str,
"SKU": str,
"JANコード": str,
}
)
df.to_csv(output_file, index=False, encoding="utf-8-sig")
dtype を指定することで、対象の列を文字列として読み込めます。
これにより、00123 のような値を 123 に変換せず、そのまま扱うことができます。
実務で気をつけたこと
実際の運用では、単に読み込んで出力するだけではなく、いくつか確認処理を入れるようにしました。
例えば、次のような点です。
- 必要な見出しが存在するか確認する
- 対象列に空欄がないか確認する
- 処理後のファイルを確認用として出力する
- 想定外の列名だった場合は処理を止める
- ログを残して、後から原因を追えるようにする
業務用のツールでは、処理が成功することだけでなく、失敗した時に気づけることも重要です。
特にCSV処理では、列のズレや見出し変更に気づかないまま処理を続けると、かなり危険です。
全部自動化しすぎない
今回のような処理では、完全自動化よりも「事故を防ぐための半自動化」を意識しました。
CSVを読み込む、必要な列を文字列として扱う、チェック用ファイルを出力する。
そこまでは自動で行い、最終確認は人間が行えるようにしています。
業務自動化というと、すべてを自動で終わらせるイメージがありますが、実務では確認工程を残した方が安全な場合もあります。
特に商品データや売上データは、間違えると後からの修正が面倒です。
まとめ
CSVの商品コードやSKUの「0落ち」は、EC運用や商品管理ではよくある事故だと思います。
Pythonで対象列を文字列として扱うだけでも、こうしたミスをかなり防ぎやすくなります。
業務自動化は、大きなシステムを作ることだけではありません。
毎回ちょっと不安な作業を安全にすることも、十分に価値のある改善だと思います。