「もらったCSVを開いたら、氏名欄に全角スペースが混じってる」「同じ人のデータが3行ある」「日付の書式がバラバラで集計できない」
こういうCSVを前にして、途方に暮れたことはありませんか。私も総務業務で名簿・勤怠・経費データを扱うようになってから、CSVの「汚れ」に毎回時間を取られていました。最初の頃は1件ずつ手で直していたんですが、ある日500行のデータを前に「これは無理だ…」と気づいたんですね。
この記事では、CSVデータに起きがちな5つの汚れパターンと、ExcelとPythonそれぞれの具体的なクレンジング手順を解説します。「クレンジングとは何か」ではなく「どこをどう直すか」の実作業レベルで書いています。
結論(先出し)
| あなたの状況 | 推奨方法 | 費用 |
|---|---|---|
| 〜1,000行・Excel慣れている | Excelの関数・機能 | 無料 |
| 1,000行〜・同じ処理を繰り返す | Python(pandas) | 無料 |
| 毎日自動・複数ファイルを一括処理 | ノーコードツール(Make等) | 無料〜 |
| 数万行・システム連携が必要 | 専用ツール(DataSpider等) | 有料 |
どちらの方法でも、クレンジングの対象は「重複・空白・表記ゆれ・日付形式・全半角」の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つを決めてから始めましょう。
- このデータを何に使うか(集計・システムインポート・名簿作成など)
- どのカラムが必須か(不要な列は削除して作業量を減らす)
- 完了基準を決める(後述のチェックリストを使う)
バックアップを取る
クレンジング前のCSVを必ずバックアップしておきます。元データに戻せない状態で作業するのは危険です。ファイル名に _original をつけてコピーしておくだけで十分です。
【Excel編】CSVデータクレンジングの6ステップ
ステップ1:文字コードを確認してCSVを正しく開く
CSVをダブルクリックで開くと文字化けすることがあります。安全な開き方は次の手順です。
- Excelを起動 → 「データ」タブ → 「テキストまたはCSVから」
- ファイルを選択
- 「ファイルの変換」で文字コードを確認(UTF-8 or Shift-JIS)
- プレビューで文字化けがないことを確認してから読み込む
ステップ2:重複行を削除する
- データ範囲を選択
- 「データ」タブ → 「重複の削除」
- 重複判定に使う列にチェックを入れてOK
- 削除件数が表示されるので確認する
注意: 削除前にどの行が重複しているかを確認したい場合は COUNTIFS 関数で重複をマークしてから削除するとミスが減ります。
=COUNTIFS($A$2:$A$1000,A2,$B$2:$B$1000,B2)
→ 2以上の値が重複行です。
ステップ3:空白・スペースを除去する
TRIM関数: 文字列の前後スペースと単語間の連続スペースを除去
=TRIM(A2)
CLEAN関数: 印刷できない制御文字(改行コードなど)を除去
=CLEAN(A2)
組み合わせ(推奨):
=TRIM(CLEAN(A2))
数式を貼り付けた列を「コピー → 値貼り付け」して元の列を上書きします。
ステップ4:表記ゆれを統一する
SUBSTITUTE関数: 特定の文字列を置換
=SUBSTITUTE(A2,"株式会社","(株)")
UPPER / LOWER関数: 英字を大文字 / 小文字に統一
=LOWER(A2) → すべて小文字
=UPPER(A2) → すべて大文字
表記ゆれのパターンが多い場合は、「検索と置換(Ctrl+H)」で一括置換するのが現実的です。
ステップ5:日付形式を統一する
TEXT関数: 日付を指定のフォーマットに変換
=TEXT(A2,"YYYY/MM/DD")
和暦→西暦の変換は DATEVALUE 関数を使います。
=DATEVALUE(A2)
→ 変換後は「書式設定」でYYYY/MM/DDに変更。
ステップ6:全角・半角を統一する
ASC関数: 全角→半角に変換
=ASC(A2)
JIS関数: 半角→全角に変換
=JIS(A2)
電話番号・郵便番号・社員コードなど数値系は ASC で半角統一するのが一般的です。
【Python編】pandasで一括クレンジングするコード
件数が1,000行を超えてくると、Excelの動作が重くなりはじめます。数万行になると関数の再計算だけで数分かかることもありますし、同じ処理を毎月繰り返すなら手操作のたびにミスのリスクが生まれるのです。一度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)}行')
Pythonをインストールしていない方へ: Google 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とPythonの比較
| Excel | Python(pandas) | |
|---|---|---|
| 初期コスト | 追加インストール不要 | 環境構築が必要(Colab利用で回避可) |
| 処理速度 | 1万行超で重くなりやすい | 数十万行でも高速 |
| 再現性 | 毎回手作業が残る | コードを保存すれば再現できる |
| ミスリスク | 手操作ミスの可能性あり | コードが正しければミスなし |
| 向いている用途 | 1回きりの少量データ | 定期・大量・複数ファイル処理 |
よくある質問(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項目で品質を確認してから次の作業へ進む
「なんとなくきれいにした気がする」ではなく、チェックリストで完了を確認する習慣をつけると、後工程のトラブルが格段に減ります。
次のステップ
ExcelとPythonのコードはこの記事から直接コピーして使えます。
毎月同じCSVのクレンジングを繰り返している場合は、Pythonで自動化する方向を検討するのが一番得策です。当サイトでは総務担当向けの業務自動化記事もまとめています。
大量データ・複数ファイルの定期処理が必要になってきたら、ノーコードツールへの移行も選択肢になります。