0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでCSVの重複行を安全に削除する方法|pandasで完全一致・キー重複を処理

0
Last updated at Posted at 2026-09-27

CSVデータを扱っていると、いつの間にか同じデータが複数行入っていることがあります。

数十行ならExcelで確認できますが、数千〜数万行になると目視での確認は現実的ではありません。

Pythonの pandas を使えば、CSVの重複確認から削除、結果の保存まで簡単に自動化できます。

この記事では、

  • CSVに重複があるか確認する
  • 完全に同じ行を削除する
  • 特定の列を基準に重複を削除する
  • 複数列を使って重複を判定する
  • 元データを壊さず保存する
  • CSVの文字コード問題に対応する

という実務で使いやすい方法を紹介します。


1. pandasをインストールする

まだpandasをインストールしていない場合は、次のコマンドを実行します。

pip install pandas

Pythonから読み込みます。

import pandas as pd

2. CSVファイルを読み込む

まずCSVを読み込みます。

import pandas as pd

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

print(df.head())
print("行数:", len(df))

処理前の行数を記録しておくと、後で何行削除されたのか確認できます。


3. 重複している行を確認する

いきなり削除するのではなく、まず重複を確認します。

duplicates = df[df.duplicated()]

print(duplicates)

重複行の件数だけ確認する場合は、

print("重複行数:", df.duplicated().sum())

で確認できます。

実務データでは、削除前に「何が重複しているのか」を確認しておく方が安全です。


4. 完全に同じ行を削除する

すべての列が同じ行を重複として削除する場合は、drop_duplicates() を使います。

cleaned = df.drop_duplicates()

print("処理前:", len(df))
print("処理後:", len(cleaned))
print("削除数:", len(df) - len(cleaned))

例えば1000行のCSVから50行の重複が削除された場合、

処理前: 1000
処理後: 950
削除数: 50

となります。

元の df を直接変更せず、cleaned という別の変数に結果を入れておくと確認しやすくなります。


5. 特定の列を基準に重複を削除する

実際の業務では「行全体が同じか」ではなく、顧客IDやメールアドレスなどを基準に重複を判定したい場合があります。

例えば次のようなCSVです。

customer_id,name,email
1001,田中太郎,tanaka@example.com
1002,山田花子,yamada@example.com
1001,田中太郎,tanaka@example.com

customer_id を基準に重複を削除する場合は、

cleaned = df.drop_duplicates(
    subset=["customer_id"],
    keep="first"
)

とします。

keep="first" は最初に出てきたデータを残します。

最後のデータを残したい場合は、

cleaned = df.drop_duplicates(
    subset=["customer_id"],
    keep="last"
)

とします。


6. 複数の列を使って重複判定する

名前だけを基準にすると、同姓同名の別人まで削除してしまう可能性があります。

その場合は複数列を指定します。

cleaned = df.drop_duplicates(
    subset=["name", "email"],
    keep="first"
)

これなら、

名前とメールアドレスの両方が一致した場合

だけ重複として扱えます。

CSVの重複削除では、プログラムそのものよりも、

何をもって「同じデータ」と判断するのか

を最初に決めることが重要です。


7. 重複データをすべて確認する

削除対象になりそうなデータをまとめて確認したい場合は、

duplicates = df[
    df.duplicated(
        subset=["customer_id"],
        keep=False
    )
]

print(duplicates)

とします。

keep=False を指定すると、重複しているグループ全体を確認できます。

削除前のチェックに便利です。


8. 元CSVを上書きしない

業務データを扱う場合、いきなり元ファイルを上書きするのはおすすめしません。

別ファイルとして保存します。

cleaned.to_csv(
    "output.csv",
    index=False,
    encoding="utf-8-sig"
)

これなら、

input.csv   ← 元データ
output.csv  ← 重複削除後

という形で両方を残せます。


9. CSVの文字コードにも注意する

CSV処理で意外と多いのが文字コードの問題です。

例えばWindowsやExcelから出力されたCSVでは、UTF-8ではなくCP932(Shift_JIS系)が使われていることがあります。

UTF-8で読み込めない場合は、

df = pd.read_csv(
    "input.csv",
    encoding="cp932"
)

を試せます。

逆に、処理後のCSVをExcelでも開きやすくしたい場合は、

cleaned.to_csv(
    "output.csv",
    index=False,
    encoding="utf-8-sig"
)

のように保存できます。


10. 実務では「重複削除だけ」で終わらない

実際のCSVデータでは、単純な重複以外にも、

  • 文字コードの違い
  • 不要な空白
  • 空欄
  • NULL
  • 列の不足
  • 表記揺れ
  • Excel由来のデータ
  • 同じ顧客なのに表記が違う

などが混在することがあります。

例えば、

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

は、人間には同じ会社に見えても、そのままでは別の文字列として扱われます。

そのため実務では、

CSV読み込み
↓
文字コード確認
↓
データ整形
↓
重複判定
↓
重複削除
↓
件数確認
↓
別ファイルへ保存

という順番で処理した方が安全です。


11. 最小構成ならこれだけでも使える

単純に完全一致する重複行を削除するだけなら、次のコードで処理できます。

import pandas as pd

input_file = "input.csv"
output_file = "output.csv"

df = pd.read_csv(input_file)

before = len(df)

cleaned = df.drop_duplicates()

after = len(cleaned)

cleaned.to_csv(
    output_file,
    index=False,
    encoding="utf-8-sig"
)

print("処理前:", before)
print("処理後:", after)
print("削除数:", before - after)
print("出力:", output_file)

これだけでも、手作業で重複行を探すよりかなり楽になります。


12. 定型的なCSV作業は自動化できる

毎日・毎週同じようなCSV整理をしている場合、

CSVを受け取る
↓
内容をチェック
↓
重複を削除
↓
CSVを生成
↓
結果を返す

まで自動化できます。

私自身も、この考え方を使ってCSV処理を自動化する仕組みを構築しています。

Python環境を用意せず、CSVファイルをアップロードして重複削除を行いたい場合は、こちらでも試せるようにしています。

ブラウザからCSVを処理する場合

Python環境を用意せずにCSVの重複削除を行いたい場合は、こちらから利用できます。

CSV重複データ削除|AutoWorks Lab


まとめ

CSVの重複削除自体は、pandasなら非常に簡単です。

cleaned = df.drop_duplicates()

ただし実務では、

  • 何を重複と判断するか
  • どのデータを残すか
  • 文字コードをどうするか
  • 元ファイルを保護するか
  • 処理前後の件数を確認するか

まで考えることが重要です。

特に業務データでは、いきなり削除するのではなく、

確認 → 重複判定 → 削除 → 件数確認 → 別ファイル保存

という流れにしておくと安全です。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?