Pandas DataFrame DataFrame.drop_duplicates() 関数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.drop_duplicates() の構文
  2. コード例:Pandas DataFrame.set_index() メソッドを使用して重複行を削除する
  3. コード例:パラメータ subset を設定する DataFrame.set_index() メソッド
  4. コード例:keep パラメータを設定する Pandas DataFrame.set_index() メソッド
  5. コード例:ignore_index パラメータを設定する DataFrame.set_index() メソッド
Pandas DataFrame DataFrame.drop_duplicates() 関数

Python Pandas DataFrame.drop_duplicates() 関数は、DataFrame から重複した行をすべて削除します。

pandas.DataFrame.drop_duplicates() の構文

DataFrame.drop_duplicates(subset: Union[Hashable, Sequence[Hashable], NoneType]=None,
                          keep: Union[str, bool]='first',
                          inplace: bool=False,
                          ignore_index: bool=False)

パラメータ

subset カラムラベルまたはラベルのシーケンス。重複を識別する際に考慮すべき列
keep firstlastFalse のいずれかを指定します。最初以外の重複をすべて削除する(keep=first)、最後以外の重複をすべて削除する(keep=first)、またはすべての重複を削除する(keep=False)
inplace 論理値。True の場合、呼び出し元の DataFrame を修正します。
ignore_index 論理値。True の場合、元の DataFrame のインデックスは無視されます。デフォルト値は False であり、インデックスが利用されることを意味します。

戻り値

inplaceTrue の場合、DataFrameDataFrame から重複した行をすべて削除し、そうでない場合は None となります。

コード例:Pandas DataFrame.set_index() メソッドを使用して重複行を削除する

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','XYZ' ) ,
             ('banana', 14, 'No','BCD' ) ,
            ('Orange', 34, 'Yes' ,'ABC') ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier'])

print("DataFrame:")
print(df)

df_unique=df.drop_duplicates() 

print("DataFrame with Unique Rows:")
print(df_unique)

出力:

DataFrame:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ
2  banana     14       No      BCD
3  Orange     34      Yes      ABC
DataFrame with Unique Rows:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ
2  banana     14       No      BCD

元の DataFrame には、1 行目と 4 行目が同じです。

drop_duplicates() メソッドを使用して、DataFrame からすべての重複行を削除できます。

コード例:パラメータ subset を設定する DataFrame.set_index() メソッド

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','XYZ' ) ,
             ('banana', 14, 'No','ABC' ) ,
            ('Orange', 34, 'Yes' ,'ABC') ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier'])

print("DataFrame:")
print(df)

df_unique=df.drop_duplicates(subset ="Supplier") 

print("DataFrame with Unique vales of Supplier Column:")
print(df_unique)

出力:

DataFrame:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ
2  banana     14       No      ABC
3  Orange     34      Yes      ABC
DataFrame with Unique vales of Supplier Column:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ

このメソッドは、Supplier カラムの値が一意でない DataFrame のすべての行を削除します。

ここでは、1 行目、3 行目、4 行目は Supplier カラムの共通の値を持っています。したがって、3 行目と 4 行目は DataFrame から削除されます; デフォルトでは、最初の重複した行は削除されません。

コード例:keep パラメータを設定する Pandas DataFrame.set_index() メソッド

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','XYZ' ) ,
             ('banana', 14, 'No','ABC' ) ,
            ('Orange', 34, 'Yes' ,'ABC') ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier'])

print("DataFrame:")
print(df)

df_unique=df.drop_duplicates(subset ="Supplier",keep="last") 

print("DataFrame with Unique vales of Supplier Column:")
print(df_unique)

出力:

DataFrame:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ
2  banana     14       No      ABC
3  Orange     34      Yes      ABC
DataFrame with Unique vales of Supplier Column:
     Name  Price In_Stock Supplier
1   Mango     24       No      XYZ
3  Orange     34      Yes      ABC

このメソッドは DataFrame の中で Supplier カラムの値が一意でない行をすべて削除し、最後の重複した行のみを保持します。

ここでは、1 行目、3 行目、4 行目は Supplier カラムの値が共通です。そのため、1 行目と 3 行目は DataFrame から削除されます。

コード例:ignore_index パラメータを設定する DataFrame.set_index() メソッド

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','XYZ' ) ,
             ('banana', 14, 'No','ABC' ) ,
            ('Orange', 34, 'Yes' ,'ABC') ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier'])

print("DataFrame:")
print(df)

df.drop_duplicates(subset ="Supplier",keep="last",inplace=True,ignore_index=True) 

print("DataFrame with Unique vales of Supplier Column:")
print(df)

出力:

DataFrame:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      XYZ
2  banana     14       No      ABC
3  Orange     34      Yes      ABC
DataFrame with Unique vales of Supplier Column:
     Name  Price In_Stock Supplier
0   Mango     24       No      XYZ
1  Orange     34      Yes      ABC

ここでは、ignore_indexTrue に設定されているので、元の DataFrame のインデックスは無視され、行に新しいインデックスが設定されます。

関数 inplace=True のため、関数 ignore_index() を呼び出した後に元の DataFrame が変更されます。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame