—
## 導入文
「もらったCSVを開いたら、氏名欄に全角スペースが混じってる」「同じ人のデータが3行ある」「日付の書式がバラバラで集計できない」
こういうCSVを前にして、途方に暮れたことはありませんか。私も総務業務で名簿・勤怠・経費データを扱うようになってから、CSVの「汚れ」に毎回時間を取られていました。
この記事では、**CSVデータに起きがちな5つの汚れパターンと、ExcelとPythonそれぞれの具体的なクレンジング手順**を解説します。「クレンジングとは何か」ではなく「どこをどう直すか」の実作業レベルで書いています。
—
## 結論(先出し)
– **件数が少ない(〜1,000行)・Excelに慣れている** → Excel操作で完結する
– **件数が多い(1,000行〜)・同じ処理を繰り返す** → Pythonのpandasで自動化
– どちらでも、**クレンジングの対象は「重複・空白・表記ゆれ・日付形式・全半角」の5パターン**が9割
—
## CSVデータが「汚れる」5つのパターン
### パターン1:重複行
同じ人・同じ取引が2行以上存在する。複数システムからデータを統合したときや、手入力で重複登録したときに発生します。
**例:**
“`
田中太郎, 2026-01-15, 5000
田中太郎, 2026-01-15, 5000 ← 同じ行がある
“`
### パターン2:余分な空白・改行
セルの先頭・末尾・中間に不要なスペースが入っている。コピペや別システムからのエクスポートで混入しやすいです。
**例:**
“`
” 田中太郎 ” → 田中太郎 (前後にスペース)
“田中 太郎” → 田中太郎 (全角スペースが中間に)
“`
### パターン3:表記ゆれ
同じ意味なのに異なる表記が混在している。集計・名寄せをするとき最大の障害になります。
**例:**
“`
株式会社〇〇 / ㈱〇〇 / 〇〇株式会社 / 〇〇(株)
田中 太郎 / 田中太郎 / たなか たろう
“`
### パターン4:日付形式のバラつき
Excelの設定・入力者によって日付の書き方が統一されていない。
**例:**
“`
2026/01/15
2026-01-15
01/15/2026
R8.1.15 (和暦)
“`
### パターン5:全角・半角の混在
数字・英字・記号が全角と半角で混在している。数値計算やコード照合でエラーの原因になります。
**例:**
“`
電話番号: 03-1234-5678 (全角)
電話番号: 03-1234-5678 (半角)
“`
—
## クレンジングの前に確認すること
### ゴールを決める
「きれいにする」という曖昧な目的で作業を始めると終わりが見えなくなります。次の3つを決めてから始めましょう。
1. **このデータを何に使うか**(集計・システムインポート・名簿作成など)
2. **どのカラムが必須か**(不要な列は削除して作業量を減らす)
3. **完了基準を決める**(後述のチェックリストを使う)
### バックアップを取る
クレンジング前のCSVを必ずバックアップしておきます。元データに戻せない状態で作業するのは危険です。ファイル名に `_original` をつけてコピーしておくだけで十分です。
—
## 【Excel編】CSVデータクレンジングの6ステップ
### ステップ1:文字コードを確認してCSVを正しく開く
CSVをダブルクリックで開くと文字化けすることがあります。安全な開き方は次の手順です。
1. Excelを起動 → 「データ」タブ → 「テキストまたはCSVから」
2. ファイルを選択
3. 「ファイルの変換」で文字コードを確認(UTF-8 or Shift-JIS)
4. プレビューで文字化けがないことを確認してから読み込む
—
### ステップ2:重複行を削除する
1. データ範囲を選択
2. 「データ」タブ → 「重複の削除」
3. 重複判定に使う列にチェックを入れてOK
4. 削除件数が表示されるので確認する
**注意:** 削除前にどの行が重複しているかを確認したい場合は `COUNTIFS` 関数で重複をマークしてから削除するとミスが減ります。
“`excel
=COUNTIFS($A$2:$A$1000,A2,$B$2:$B$1000,B2)
“`
→ 2以上の値が重複行です。
—
### ステップ3:空白・スペースを除去する
**TRIM関数:** 文字列の前後スペースと単語間の連続スペースを除去
“`excel
=TRIM(A2)
“`
**CLEAN関数:** 印刷できない制御文字(改行コードなど)を除去
“`excel
=CLEAN(A2)
“`
**組み合わせ(推奨):**
“`excel
=TRIM(CLEAN(A2))
“`
数式を貼り付けた列を「コピー → 値貼り付け」して元の列を上書きします。
—
### ステップ4:表記ゆれを統一する
**SUBSTITUTE関数:** 特定の文字列を置換
“`excel
=SUBSTITUTE(A2,”株式会社”,”(株)”)
“`
**UPPER / LOWER関数:** 英字を大文字 / 小文字に統一
“`excel
=LOWER(A2) → すべて小文字
=UPPER(A2) → すべて大文字
“`
表記ゆれのパターンが多い場合は、「検索と置換(Ctrl+H)」で一括置換するのが現実的です。
—
### ステップ5:日付形式を統一する
**TEXT関数:** 日付を指定のフォーマットに変換
“`excel
=TEXT(A2,”YYYY/MM/DD”)
“`
和暦→西暦の変換は `DATEVALUE` 関数を使います。
“`excel
=DATEVALUE(A2)
“`
→ 変換後は「書式設定」でYYYY/MM/DDに変更。
—
### ステップ6:全角・半角を統一する
**ASC関数:** 全角→半角に変換
“`excel
=ASC(A2)
“`
**JIS関数:** 半角→全角に変換
“`excel
=JIS(A2)
“`
電話番号・郵便番号・社員コードなど数値系は `ASC` で半角統一するのが一般的です。
—
## 【Python編】pandasで一括クレンジングするコード
1,000行以上のデータや、毎月同じクレンジングを繰り返す場合はPythonが効率的です。以下はコピペで動く最小コードです。
“`python
import pandas as pd
# CSVを読み込む
df = pd.read_csv(‘input.csv’, encoding=’utf-8-sig’)
# 1. 重複行の削除
df = df.drop_duplicates()
# 2. 文字列の前後空白を除去
df = df.apply(lambda col: col.str.strip() if col.dtype == ‘object’ else col)
# 3. 欠損値の処理(空文字に統一)
df = df.fillna(”)
# 4. 全角英数字を半角に変換(unicodedataを使用)
import unicodedata
def normalize_text(text):
if isinstance(text, str):
return unicodedata.normalize(‘NFKC’, text)
return text
df = df.applymap(normalize_text)
# 5. 特定列の表記ゆれを統一(例:会社名)
df[‘会社名’] = df[‘会社名’].str.replace(‘株式会社’, ‘(株)’, regex=False)
# 6. 日付列を統一フォーマットに変換
df[‘日付’] = pd.to_datetime(df[‘日付’], errors=’coerce’).dt.strftime(‘%Y/%m/%d’)
# 結果を保存
df.to_csv(‘output.csv’, index=False, encoding=’utf-8-sig’)
print(f’完了:{len(df)}行’)
“`
**Google Colabで使う場合:** ローカルにPythonがなくてもColabにCSVをアップロードすれば同じコードが動きます。
—
## クレンジング完了チェックリスト10項目
作業後にこのリストを確認して、完了基準を満たしているか確認してください。
“`
□ 1. 重複行が削除されている
□ 2. 氏名・会社名の前後スペースが除去されている
□ 3. 全角・半角が統一されている(数値・英字・記号)
□ 4. 日付フォーマットが統一されている
□ 5. 欠損値(空欄)が意図した形で処理されている
□ 6. 表記ゆれが統一されている(主要な名称)
□ 7. 不要な列が削除されている
□ 8. ヘッダー行が正しく1行目にある
□ 9. 文字コードが意図した形式になっている(UTF-8 or Shift-JIS)
□ 10. バックアップ(元データ)が別ファイルで保存されている
“`
—
## よくある失敗と対処法
### 失敗1:ExcelでCSVを開いたら数値が日付になった
「01-05」などのデータがExcelに自動変換されて「1月5日」になるのは有名な罠です。
→ **対処法:** テキストインポートウィザードを使い、該当列を「文字列」として読み込む。または、開く前にファイル拡張子を `.txt` に変更する。
### 失敗2:TRIM関数を使っても空白が残る
全角スペース(U+3000)はTRIMでは除去できません。
→ **対処法:** `=SUBSTITUTE(TRIM(A2),” “,””)` で全角スペースも同時に除去する。
### 失敗3:pandasで日本語CSVが文字化けする
→ **対処法:** `encoding=’utf-8-sig’` または `encoding=’shift_jis’` を試す。どちらかで解決します。
### 失敗4:クレンジング後にデータ件数が大幅に減った
重複削除の条件列を間違えて、本来残すべきデータまで削除してしまうケースです。
→ **対処法:** バックアップと突き合わせて削除件数を確認する。削除前に `COUNTIFS` で重複フラグをつけてから確認する。
—
## メリット・デメリット
### Excelクレンジングのメリット
– 追加インストール不要・すぐに始められる
– 操作を目で確認しながら進められる(初心者向き)
– 関数で変換内容を列として保持できる(元データを残せる)
### Excelクレンジングのデメリット
– 大量データ(1万行以上)では動作が重くなる
– 同じ処理を毎月繰り返す場合は非効率
– 人手のオペレーションが残るため、ミスの可能性がある
### Pythonクレンジングのメリット
– 大量データでも高速処理
– コードを保存すれば毎回同じ処理を再現できる
– 複雑な条件分岐・複数ファイルの一括処理が得意
### Pythonクレンジングのデメリット
– 最初の環境構築が必要
– コードのデバッグに時間がかかることがある
—
## よくある質問(FAQ)
**Q:CSVのデータクレンジングにかかる時間はどれくらいですか?**
A:データ件数と汚れの程度によります。1,000行以内でExcelを使う場合、慣れれば30分〜1時間で完了します。Pythonのコードを準備済みであれば、10分以内に終わります。
**Q:専用のデータクレンジングツールは必要ですか?**
A:数万行以内の処理であれば、Excel・Pythonで十分対応できます。専用ツール(DataSpider・Talendなど)はシステム連携や毎日の自動処理が必要になる場合に検討してください。
**Q:Pythonがわからなくても使えますか?**
A:この記事のコードはコピペで動きます。Google ColabにCSVをアップロードしてコードを貼り付ければ、Pythonのインストールなしに実行できます。
**Q:クレンジングした後のデータはどう保存すればいいですか?**
A:UTF-8(BOM付き)での保存を推奨します。ExcelでCSVとして保存する場合は「CSV UTF-8 (コンマ区切り)」形式を選んでください。日本語が文字化けしにくくなります。
—
## まとめ
– CSVの汚れは「重複・空白・表記ゆれ・日付形式・全半角」の5パターンが大半
– 1,000行以内ならExcelの関数・機能で十分クレンジングできる
– 繰り返し処理・大量データはPythonのpandasが圧倒的に効率的
– 作業前にゴール設定とバックアップを忘れずに
– 完了チェックリスト10項目で品質を確認してから次の作業へ進む
「なんとなくきれいにした気がする」ではなく、チェックリストで完了を確認する習慣をつけると、後工程のトラブルが格段に減ります。
—
## CV導線
Excelの関数コードとPythonコードはこの記事から直接コピーして使えます。
毎月同じCSVのクレンジングを繰り返している場合は、Pythonで自動化する方向を検討してみてください。当サイトでは総務担当向けの業務自動化記事もまとめています。
大量データ・複数ファイルの定期処理が必要になってきたら、Make・Yoomといったノーコードツールや、専用のデータ管理ツールへの移行も選択肢です。
コメント