Excel・CSVの表記ゆれや余分な空白をまとめて整える方法|Google Colab+Python

Python・データ処理

「見た目は同じなのに、なぜか重複チェックや集計で別データ扱いになる。」

そんなことはありませんか?

商品マスターや顧客リストをまとめていると、

  • a001 と A001
  • A003 と A003
  • 株式会社ABC と 株式会社ABC
  • 東京 と  東京

のように、見た目はほとんど同じでも、実際には文字の種類や余分なスペースが違うデータが混ざることがあります。

この状態のままでは、

  • 重複チェックで同じ商品なのに別データとして扱われる
  • 店舗別・地域別の集計が分かれる
  • 商品コードで照合しても一致しない
  • CSVを結合したあとに表記ゆれが増える

といった問題が起きます。

この記事では、Google ColabとPythonを使って、CSV内の表記ゆれや余分な空白をまとめて整える方法を紹介します。

今回は実際に、

  • 文字列の前後にある余分な空白を削除
  • 商品コードの小文字・大文字を統一
  • 全角英数字を半角へ統一
  • 会社名・地域もまとめて整形
  • 整形後のCSVを保存

まで動作確認しました。

PythonをPCへインストールする必要はありません。

「同じはずのデータが、微妙な表記の違いで別物として扱われる」問題を減らしたい人向けの記事です。

✅ この記事は実際に動作検証しています

表記ゆれを含むCSVをGoogle Colabで処理し、前後の余分な空白、全角・半角、大文字・小文字などを統一しました。整形後のデータを新しいCSVとして保存しています。

検証結果: 前後空白削除:確認済み / NFKC正規化:確認済み / 大文字化:確認済み / cleaned_data.csvを出力

この記事はこんな人向け

  • 商品コードの大文字・小文字が混ざっている
  • CSVを結合したら全角・半角がバラバラになった
  • 顧客名や会社名の前後に余分なスペースが入っている
  • 重複チェックをしても同じデータがうまくまとまらない
  • 店舗名・地域名の表記を揃えたい
  • CSVを受け取るたびにExcelで手作業で文字を直している

この記事でできるようになること

今回の方法では、例えば次のようなデータを、

a001
A002
A003
 A004
a005

次のように揃えます。

A001
A002
A003
A004
A005

また、

" 株式会社ABC "
" 大阪"
"福岡 "

のような前後の空白も削除します。

最終的には、

表記ゆれのあるCSV
↓
余分な空白を削除
↓
全角英数字を半角へ統一
↓
大文字・小文字を統一
↓
cleaned_data.csvとして保存

という流れです。

今回使うデータ

今回は、次のようなデータを使います。

商品コード会社名地域
a001株式会社ABC東京
A002株式会社DEF大阪
A003株式会社GHI福岡
A004株式会社JKL名古屋
a005株式会社MNO札幌

見た目だけでは分かりにくいですが、

  • 商品コードに小文字が混ざっている
  • 商品コードに全角英数字が混ざっている
  • 会社名や地域の前後に余分なスペースがある

状態です。

今回はこのファイルを、

text_cleanup_test.csv

として使用します。

Google ColabでCSVを読み込む

Google Colabで新しいノートブックを作成します。

今回は、

TaskLess Lab_CSV表記ゆれ整形テスト

という名前にしました。

CSVをアップロードしたら、次のコードを実行します。

import pandas as pd
import unicodedata

df = pd.read_csv("text_cleanup_test.csv")

display(df)

まずは元データを表示して、表記ゆれが残っていることを確認します。

まず前後の余分な空白を削除する

文字列の前後に入っている余分な空白は、str.strip() を使って削除できます。

例えば商品コードなら、

df["商品コード"] = df["商品コード"].str.strip()

です。

会社名なら、

df["会社名"] = df["会社名"].str.strip()

地域なら、

df["地域"] = df["地域"].str.strip()

と書きます。

今回の検証では、str.strip() で前後の半角スペースだけでなく、全角スペースも取り除けました。

例えば、

" 株式会社ABC "

は、

株式会社ABC

に、

" 大阪"

は、

大阪

に整えられます。

商品コードの大文字・小文字を統一する

商品コードでは、

a001
A001

のように大文字・小文字が混ざることがあります。

この場合は、str.upper() を使って大文字に統一できます。

df["商品コード"] = (
    df["商品コード"]
    .str.strip()
    .str.upper()
)

これで、

a001

は、

A001

になります。

逆に小文字へ統一したい場合は、

.str.lower()

を使えます。

全角英数字を半角へ統一する

次に、

A003

のような全角英数字を、

A003

へ揃えます。

今回はPython標準の unicodedata を使います。

import unicodedata

そして、商品コードに次の処理を加えます。

df["商品コード"] = (
    df["商品コード"]
    .str.strip()
    .apply(lambda x: unicodedata.normalize("NFKC", x))
    .str.upper()
)

この中の、

unicodedata.normalize("NFKC", x)

が、全角英数字などを統一する処理です。

今回のテストでは、

A003

が、

A003

に、

a005

が、

A005

に揃いました。

会社名・地域もまとめて整形する

商品コードだけでなく、会社名・地域もまとめて整えます。

今回最終的に使ったコードは次のとおりです。

import unicodedata

df["商品コード"] = (
    df["商品コード"]
    .str.strip()
    .apply(lambda x: unicodedata.normalize("NFKC", x))
    .str.upper()
)

df["会社名"] = (
    df["会社名"]
    .str.strip()
    .apply(lambda x: unicodedata.normalize("NFKC", x))
)

df["地域"] = (
    df["地域"]
    .str.strip()
    .apply(lambda x: unicodedata.normalize("NFKC", x))
)

display(df)

この処理で、

  • 商品コードの前後空白削除
  • 商品コードの全角英数字を半角へ統一
  • 商品コードを大文字へ統一
  • 会社名の前後空白削除
  • 地域の前後空白削除
  • 文字種の統一

をまとめて行います。

整形後は、

A001  株式会社ABC  東京
A002  株式会社DEF  大阪
A003  株式会社GHI  福岡
A004  株式会社JKL  名古屋
A005  株式会社MNO  札幌

のように、表記が揃いました。

strip() と normalize() の役割は違う

今回使った2つの処理には、それぞれ役割があります。

str.strip()

文字列の前後にある余分な空白を削除します。

例えば、

" 東京 "

を、

東京

にします。

unicodedata.normalize("NFKC", x)

全角・半角などの文字種をある程度揃えます。

例えば、

A003

を、

A003

へ変換します。

つまり、

余分な空白 → strip()
全角・半角 → normalize()
大文字・小文字 → upper()

と覚えると分かりやすいです。

なぜ表記ゆれを先に整えるのか

表記ゆれが残っていると、後工程で問題が起きやすくなります。

例えば、

A001
a001
A001

は、人が見れば同じ商品コードだと分かります。

しかしそのまま比較すると、文字列としては別の値として扱われる可能性があります。

その結果、

  • 重複チェックで検出できない
  • 商品コード同士の照合に失敗する
  • 集計結果が分かれる
  • CSV結合後に同じ商品が複数行できる

といった問題につながります。

そのため、データを比較・集計する前に、表記を揃えておくと扱いやすくなります。

表記を揃えたあとは、同じ商品コードや顧客IDが複数登録されていないか確認しておくと、データをさらに整理できます。

  CSVの重複データを抽出・削除する方法はこちら

整形後のCSVを保存する

最後に、表記を整えたデータを新しいCSVとして保存します。

df.to_csv(
    "cleaned_data.csv",
    index=False,
    encoding="utf-8-sig"
)

print("cleaned_data.csv を作成しました")

実行すると、Google Colabの左側ファイル一覧に、

cleaned_data.csv

が表示されます。

これをダウンロードすれば、Excelで開いたり、ほかの処理に使ったりできます。

元CSVを上書きせず、別ファイルで保存する理由

今回は、

text_cleanup_test.csv

をそのまま上書きせず、

cleaned_data.csv

として保存しています。

これは、整形前の元データを残しておくためです。

もし変換結果に問題があった場合でも、元データが残っていればやり直せます。

実務でも、最初は元CSVを上書きせず、

元データ
↓
整形
↓
別ファイルとして保存

にしておく方が安全です。

自分のCSVで変更する場所

今回のコードを自分のファイルで使う場合、主に変更するのは次の部分です。

今回の設定自分のCSVでは
text_cleanup_test.csv実際のCSVファイル名
"商品コード"整形したい列名
"会社名"整形したい列名
"地域"整形したい列名
cleaned_data.csv保存するファイル名

例えば顧客IDなら、

df["顧客ID"] = (
    df["顧客ID"]
    .str.strip()
    .apply(lambda x: unicodedata.normalize("NFKC", x))
    .str.upper()
)

のように変更できます。

すべての文字列列を一括で整えることもできる

列数が少なければ、今回のように列ごとに指定した方が分かりやすいです。

一方で、文字列の列が多い場合は、すべての文字列列をまとめて処理する方法もあります。

ただし、

  • 商品コードは大文字にしたい
  • 会社名は大文字にしたくない
  • 一部の列はそのまま残したい

といった違いがあることも多いため、最初は列ごとに処理を決める方が安全です。

この方法で直せない表記ゆれもある

今回扱ったのは、機械的に統一しやすい表記ゆれです。

例えば、

  • 前後の空白
  • 全角・半角
  • 大文字・小文字

です。

一方、

株式会社ABC
(株)ABC
ABC株式会社

や、

東京都
東京

のような違いは、単純な strip() や normalize() だけでは同じ表記にはなりません。

これらを揃える場合は、

  • 置換ルールを作る
  • 対応表を作る
  • 名寄せ処理をする

など、もう一段別の処理が必要です。

この記事ではまず、機械的に安全に揃えやすい表記ゆれを対象にしています。

どんな仕事で使える?

今回の方法は、商品マスター以外にも使えます。

  • 顧客IDの大文字・小文字統一
  • JANコードやSKUの全角・半角統一
  • 店舗名の前後スペース削除
  • 会社名の余分な空白削除
  • CSV結合前のデータ整形
  • 重複チェック前の前処理
  • システムへ取り込むCSVの形式統一

特に、

複数の人・複数のシステムから集めたCSVを1つにまとめる

仕事では、表記ゆれが入りやすいので使いやすい処理です。

前回の欠損チェックとの違い

前回の記事では、

セルに何も入っていない

欠損データをチェックしました。

今回は、

値は入っているが、表記が揃っていない

データを整えています。

例えば、

NaN

なら欠損チェック。

a001
A001
 A001

なら今回の表記ゆれチェックです。

この2つを組み合わせると、

空白がないか確認
↓
表記を揃える
↓
重複チェック
↓
比較・集計

というデータ整理の流れを作れます。

値そのものが入っていないセルを確認したい場合は、欠損チェックを使います。

Excel・CSVの空白セルや欠損データを自動チェックする方法|Google Colab+Python
Excel・CSVの空白セルや欠損データをGoogle ColabとPythonで自動チェックする方法を解説。列ごとの欠損件数、空白を含む行の抽出、特定列の確認、CSV保存まで実際に検証しました。

表記を揃えた2つのCSVについて、価格や在庫などの変更点を確認したい場合は新旧比較が使えます。

CSVの新旧ファイルを比較して変更・追加・削除を判定する方法|Google Colab+Pythonで自動化
2つのCSVをGoogle ColabとPythonで比較し、変更・追加・削除・変更なしを自動判定する方法を解説。Pythonのインストール不要で、比較キーや比較項目の変更方法、CSV出力まで実際に検証しました。

まとめ

今回は、Google ColabとPythonを使ってCSVの表記ゆれを整えました。

実際に確認したのは、

  • 前後の余分な空白を削除
  • 商品コードを大文字に統一
  • 全角英数字を半角へ統一
  • 会社名・地域もまとめて整形
  • 整形後のデータをCSV保存

です。

特に、

a001
A001
 A001

のような違いは、人が見れば同じでも、データ処理では別の値として扱われる原因になります。

重複チェックや集計をする前に表記を揃えておくだけで、その後のデータ処理がかなり安定します。

毎回Excelでスペースを消したり、大文字・小文字を直したりしているなら、この方法で表記ゆれをまとめて整えて、面倒な修正作業を減らしていきましょう!

タイトルとURLをコピーしました