PythonのPandasには、重複行の検出や削除を行うための便利なメソッドが用意されています。
主に使うのは以下の2つです。
duplicated(): 重複しているかどうかを判定drop_duplicates(): 重複行を削除
それぞれ詳しく解説します。
目次
重複行の抽出(duplicated())
duplicated()は各行がすでに出現した行と同じかどうかをTrue/Falseで返します。
デフォルトでは、先に出てきた行を残して後の重複をTrueにします。
import pandas as pd
data = {
"name": ["Alice", "Bob", "Alice", "Charlie", "Bob"],
"age": [25, 30, 25, 35, 30]
}
df = pd.DataFrame(data)
print(df)
基本的な使い方
df.duplicated()
つまり、行2(Alice,25)と行4(Bob,30)が重複と判定されました。
重複行を抽出
df[df.duplicated()]
重複行の削除(drop_duplicates())
重複行を削除して新しいDataFrameを返します。
デフォルトでは最初の出現を残して、以降の重複を削除します。
df.drop_duplicates()
特定の列で重複判定(subset引数)
全列ではなく、一部の列で重複を判定することも可能です。
例:nameだけで重複判定
df.drop_duplicates(subset=["name"])
※AliceやBobの2回目以降は削除される。
残す重複の基準(keep引数)
keep="first": 最初の行を残す(デフォルト)keep="last": 最後の行を残すkeep=False: すべて削除(完全に重複を排除)
例:最後を残す
df.drop_duplicates(keep="last")
まとめ
- 抽出:
df[df.duplicated()] - 削除:
df.drop_duplicates() - 特定の列で判定:
subset=["列名"] - 残す基準:
keep="first" | "last" | False
以上、PythonのPandasで重複した行の抽出と削除についてでした。
最後までお読みいただき、ありがとうございました。
