0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelでCSVを開いたら商品コードの0が消えたので、Pythonで事故を防いだ話

0
Posted at

はじめに

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で対象列を文字列として扱うだけでも、こうしたミスをかなり防ぎやすくなります。

業務自動化は、大きなシステムを作ることだけではありません。

毎回ちょっと不安な作業を安全にすることも、十分に価値のある改善だと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?