DataFrame や Series の重複データチェックは duplicated メソッドと any メソッドの組み合わせで実行できます。データを削除したければ drop_duplicates メソッドを使います。
- 目次 -
スポンサーリンク
DataFrameの場合
重複チェック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from pandas import DataFrame df = DataFrame([['AA',100],['AA',200],['AA',200], ['BB',100],['BB',200]],columns=['x','y']) #-------------------- # x y # 0 AA 100 # 1 AA 200 ← 重複 # 2 AA 200 ← 重複 # 3 BB 100 # 4 BB 200 #-------------------- df.duplicated().any() #-------------------- # True #-------------------- |
結果は True、つまり重複ありです。
ちなみに、duplicated 単独だと boolean のシリーズが返ってきます。
1 2 3 4 5 6 7 8 9 10 |
df.duplicated() #----------------- # 0 False # 1 False # 2 True # 3 False # 4 False #----------------- 先行データと重複する行が True になっています。 |
この出力結果に True が含まれているかどうかを調べるのが any です。
重複をなくすと
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
df = DataFrame([['AA',100],['AA',200],['AA',300], ['BB',100],['BB',200]],columns=['x','y']) #----------------- # x y # 0 AA 100 # 1 AA 200 # 2 AA 300 # 3 BB 100 # 4 BB 200 #----------------- df.duplicated().any() #----------------- # False #----------------- |
もちろん False です。
部分的な重複チェック
行全体ではなく、部分的な重複を調べることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
df = DataFrame([['AA',100,1],['AA',200,1],['AA',200,2], ['BB',100,1],['BB',200,1]], columns=['x','y','z']) #------------------------------ # x y z # 0 AA 100 1 # 1 AA 200 1 ← x y が重複 # 2 AA 200 2 ← x y が重複 # 3 BB 100 1 # 4 BB 200 1 #------------------------------ # # 行全体の重複チェックは False # df.duplicated().any() #----------------- # False #----------------- # # x と y 列の重複チェックは True # df.duplicated(['x', 'y']).any() #----------------- # True #----------------- |
重複データを削除
重複データは drop_duplicates メソッドで削除できます。
1 2 3 4 5 6 7 8 |
df.drop_duplicates(['x', 'y']) #----------------- # x y z # 0 AA 100 1 # 1 AA 200 1 # 3 BB 100 1 # 4 BB 200 1 #----------------- |
デフォルトでは前のデータが残り、後ろのデータが削除されます。
後のデータを残したければ、オプションで keep=’last’ を指定します。
1 2 3 4 5 6 7 8 |
df.drop_duplicates(['x', 'y'], keep='last') #----------------- # x y z # 0 AA 100 1 # 2 AA 200 2 # 3 BB 100 1 # 4 BB 200 1 #----------------- |
Seriesの場合
Series も同じように重複を処理できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from pandas import Series ss = Series(['AA','BB','CC','CC','DD']) #-------------------- # 0 AA # 1 BB # 2 CC ← 重複 # 3 CC ← 重複 # 4 DD #-------------------- # # 重複チェック # ss.duplicated().any() #-------------------- # True #-------------------- # # 重複データ削除 # ss.drop_duplicates() #-------------------- # 0 AA # 1 BB # 2 CC # 4 DD #-------------------- |