pandasにおけるduplicatedとdrop_duplicatesの活用

duplicatedとは

duplicatedはpandasのメソッドで、DataFrameやSeriesから重複した要素を含む行を検出・抽出するために使用されます。

基本的な使い方

duplicatedメソッドは重複した行をTrueとするブール値のSeriesを返します。デフォルトでは、すべての列の要素が一致していると重複行と判定されます。

print(df.duplicated())
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

得られたSeriesを使って、元のDataFrameから重複した行のデータを抽出できます。

print(df[df.duplicated()])
#    name  age state  point
# 6  Dave   68    TX     70

残す行を選択: 引数keep

デフォルトは引数 keep='first' で、重複した最初の行はFalseになります。最初(first)の行がkeepされるイメージです。keep='last' とすると、重複した最後の行がFalseになります。最後(last)の行がkeepされるイメージです。

print(df.duplicated())  # keep='first' is default
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

print(df.duplicated(keep='last'))
# 0    False
# 1    False
# 2    False
# 3     True
# 4    False
# 5    False
# 6    False
# dtype: bool

keep=False とすると、重複した行すべてがTrueとなります。

print(df.duplicated(keep=False))
# 0    False
# 1    False
# 2    False
# 3     True
# 4    False
# 5    False
# 6     True
# dtype: bool

重複を判定する列を指定: 引数subset

デフォルトではすべての列の要素が一致している行が重複行と判定されTrueとなります。引数 subset で判定する列を指定できます。

print(df.duplicated(subset='state'))
# 0    False
# 1    False
# 2     True
# 3    False
# 4     True
# 5     True
# 6     True
# dtype: bool

リストで複数の列を指定することも可能です。指定したすべての列の要素が一致している行がTrueとなります。

print(df.duplicated(subset=['state', 'point']))
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

重複した行の数をカウント

duplicatedで得られたSeriesのTrueをカウントすると、重複した行の数が確認できます。

参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

drop_duplicatesとは

drop_duplicatesはpandasのメソッドで、DataFrameやSeriesから重複した要素を含む行を削除するために使用されます。

基本的な使い方

drop_duplicatesメソッドは重複した行を削除した新しいDataFrameを返します。デフォルトでは、すべての列の要素が一致していると重複行と判定されます。

print(df.drop_duplicates())
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0

残す行を選択: 引数keep

デフォルトは引数 keep='first' で、重複した最初の行が残ります。最初(first)の行がkeepされるイメージです。keep='last' とすると、重複した最後の行が残ります。最後(last)の行がkeepされるイメージです。

print(df.drop_duplicates())  # keep='first' is default
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0

print(df.drop_duplicates(keep='last'))
#     brand style  rating
# 1  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 4  Indomie  pack     5.0

keep=False とすると、重複した行すべてが削除されます。

print(df.drop_duplicates(keep=False))
#     brand style  rating
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0

重複を判定する列を指定: 引数subset

デフォルトではすべての列の要素が一致している行が重複行と判定されます。引数 subset で判定する列を指定できます。

print(df.drop_duplicates(subset='brand'))
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5

リストで複数の列を指定することも可能です。指定したすべての列の要素が一致している行が削除されます。

print(df.drop_duplicates(subset=['brand', 'style']))
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

duplicatedとdrop_duplicatesの基本的な使い方

duplicateddrop_duplicatesは、pandasのDataFrameやSeriesから重複した行を検出・削除するためのメソッドです。

duplicatedの基本的な使い方

duplicatedメソッドは、重複した行をTrueとするブール値のSeriesを返します。デフォルトでは、すべての列の要素が一致していると重複行と判定されます。

print(df.duplicated())
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

得られたSeriesを使って、元のDataFrameから重複した行のデータを抽出できます。

print(df[df.duplicated()])
#    name  age state  point
# 6  Dave   68    TX     70

drop_duplicatesの基本的な使い方

drop_duplicatesメソッドは、重複した行を削除した新しいDataFrameを返します。デフォルトでは、すべての列の要素が一致していると重複行と判定されます。

print(df.drop_duplicates())
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0
参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

引数keepの活用

duplicateddrop_duplicatesメソッドの引数keepは、重複した行の中でどの行を残すかを指定するために使用されます。

duplicatedの引数keepの活用

duplicatedメソッドでは、引数 keep='first' がデフォルトで、重複した最初の行はFalseになります。最初(first)の行がkeepされるイメージです。keep='last' とすると、重複した最後の行がFalseになります。最後(last)の行がkeepされるイメージです。

print(df.duplicated())  # keep='first' is default
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

print(df.duplicated(keep='last'))
# 0    False
# 1    False
# 2    False
# 3     True
# 4    False
# 5    False
# 6    False
# dtype: bool

keep=False とすると、重複した行すべてがTrueとなります。

print(df.duplicated(keep=False))
# 0    False
# 1    False
# 2    False
# 3     True
# 4    False
# 5    False
# 6     True
# dtype: bool

drop_duplicatesの引数keepの活用

drop_duplicatesメソッドでは、引数 keep='first' がデフォルトで、重複した最初の行が残ります。最初(first)の行がkeepされるイメージです。keep='last' とすると、重複した最後の行が残ります。最後(last)の行がkeepされるイメージです。

print(df.drop_duplicates())  # keep='first' is default
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0

print(df.drop_duplicates(keep='last'))
#     brand style  rating
# 1  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 4  Indomie  pack     5.0

keep=False とすると、重複した行すべてが削除されます。

print(df.drop_duplicates(keep=False))
#     brand style  rating
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
# 4  Indomie  pack     5.0
参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

引数subsetの活用

duplicateddrop_duplicatesメソッドの引数subsetは、重複を判定する列を指定するために使用されます。

duplicatedの引数subsetの活用

duplicatedメソッドでは、デフォルトではすべての列の要素が一致している行が重複行と判定されます。引数 subset で判定する列を指定できます。

print(df.duplicated(subset='state'))
# 0    False
# 1    False
# 2     True
# 3    False
# 4     True
# 5     True
# 6     True
# dtype: bool

リストで複数の列を指定することも可能です。指定したすべての列の要素が一致している行がTrueとなります。

print(df.duplicated(subset=['state', 'point']))
# 0    False
# 1    False
# 2    False
# 3    False
# 4    False
# 5    False
# 6     True
# dtype: bool

drop_duplicatesの引数subsetの活用

drop_duplicatesメソッドでは、デフォルトではすべての列の要素が一致している行が重複行と判定されます。引数 subset で判定する列を指定できます。

print(df.drop_duplicates(subset='brand'))
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5

リストで複数の列を指定することも可能です。指定したすべての列の要素が一致している行が削除されます。

print(df.drop_duplicates(subset=['brand', 'style']))
#     brand style  rating
# 0  Yum Yum   cup     4.0
# 2  Indomie   cup     3.5
# 3  Indomie  pack    15.0
参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

重複行の数をカウントする方法

duplicatedメソッドで得られたSeriesのTrueをカウントすると、重複した行の数が確認できます。

特定の列における重複行の数をカウントする

特定の列における重複行の数をカウントするには、以下のようにします。

print(df['state'].duplicated().sum())
# 3

DataFrame全体における重複行の数をカウントする

DataFrame全体における重複行の数をカウントするには、以下のようにします。

print(df.duplicated().sum())
# 1
参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

まとめ

pandasのduplicateddrop_duplicatesメソッドは、DataFrameやSeriesから重複した行を検出・削除するための強力なツールです。

  • duplicatedメソッドは、重複した行をTrueとするブール値のSeriesを返します。
  • drop_duplicatesメソッドは、重複した行を削除した新しいDataFrameを返します。

これらのメソッドは、引数keepsubsetを使って、どの行を残すか、どの列を考慮するかを指定できます。

  • 引数 keep='first' は、重複した最初の行を残します。
  • 引数 keep='last' は、重複した最後の行を残します。
  • 引数 keep=False は、重複した行すべてを削除します。
  • 引数 subset で判定する列を指定できます。

また、duplicatedで得られたSeriesのTrueをカウントすることで、重複した行の数を確認できます。

これらのメソッドを活用することで、データの重複を効率的に処理し、データ分析をよりスムーズに進めることができます。

参考文献:
pandas.DataFrame, Seriesの重複した行を抽出・削除 | note.nkmk.me

投稿者 karaza

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です