Pandas で重複した行をドロップ
Suraj Joshi
2023年1月30日
-
DataFrame.drop_duplicates()
構文 -
DataFrame.drop_duplicates()
メソッドを用いて重複行を削除する -
drop_duplicates()
メソッドでkeep='last'
を設定する
このチュートリアルでは、DataFrame.drop_duplicates()
メソッドを使用して Pandas DataFrame から重複した行をすべて削除する方法を説明します。
DataFrame.drop_duplicates()
構文
DataFrame.drop_duplicates(subset=None, keep="first", inplace=False, ignore_index=False)
これは、DataFrame 内のすべての繰り返し行を削除した DataFrame を返します。
DataFrame.drop_duplicates()
メソッドを用いて重複行を削除する
import pandas as pd
df_with_duplicates = pd.DataFrame(
{
"Id": [302, 504, 708, 103, 303, 302],
"Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
"Cost": ["300", "400", "350", "100", "300", "300"],
}
)
df_without_duplicates = df_with_duplicates.drop_duplicates()
print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")
print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")
出力:
DataFrame with duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
4 303 Watch 300
5 302 Watch 300
DataFrame without duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
4 303 Watch 300
すべての列に対して同じ値を持つ行を削除します。デフォルトでは、DataFrame の各列に対して同じ値を持つ行のみが重複しているとみなされています。df_with_duplicates
の DataFrame では、1 行目と 5 行目がすべての列に対して同じ値を持つので、5 行目が削除されています。
パラメータ subset
を設定して特定の列のみに基づいて重複を削除する
import pandas as pd
df_with_duplicates = pd.DataFrame(
{
"Id": [302, 504, 708, 103, 303, 302],
"Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
"Cost": ["300", "400", "350", "100", "300", "300"],
}
)
df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"])
print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")
print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")
出力:
DataFrame with duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
4 303 Watch 300
5 302 Watch 300
DataFrame without duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
ここでは、drop_duplicates()
メソッドに Name
を subset
引数として渡します。4 行目と 5 行目は、最初のカラムと同じ値の Name
カラムを持つので削除されています。
drop_duplicates()
メソッドで keep='last'
を設定する
import pandas as pd
df_with_duplicates = pd.DataFrame(
{
"Id": [302, 504, 708, 103, 303, 302],
"Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
"Cost": ["300", "400", "350", "100", "300", "300"],
}
)
df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep="last")
print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")
print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")
出力:
DataFrame with duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
4 303 Watch 300
5 302 Watch 300
DataFrame without duplicates:
Id Name Cost
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
5 302 Watch 300
カラム Name
と同じ値を持つ最後の行を除くすべての行を削除します。
keep=False
を指定することで、どのカラムでも同じ値を持つ行をすべて削除することができます。
import pandas as pd
df_with_duplicates = pd.DataFrame(
{
"Id": [302, 504, 708, 103, 303, 302],
"Name": ["Watch", "Camera", "Phone", "Shoes", "Watch", "Watch"],
"Cost": ["300", "400", "350", "100", "300", "300"],
}
)
df_without_duplicates = df_with_duplicates.drop_duplicates(subset=["Name"], keep=False)
print("DataFrame with duplicates:")
print(df_with_duplicates, "\n")
print("DataFrame without duplicates:")
print(df_without_duplicates, "\n")
出力:
DataFrame with duplicates:
Id Name Cost
0 302 Watch 300
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
4 303 Watch 300
5 302 Watch 300
DataFrame without duplicates:
Id Name Cost
1 504 Camera 400
2 708 Phone 350
3 103 Shoes 100
最初の行、5 番目の行、6 番目の行はすべて Name
カラムと同じ値を持つので削除されます。
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn