Pandas数据框架 drop_duplicates的完整指南

464 阅读4分钟

drop_duplicates()函数是Pandas库中的一个通用函数,在我们处理数据集和分析数据的时候,它是一个重要的函数。

Pandas数据框 drop_duplicates

Pandas drop_duplicates()函数用于分析重复的数据并将其删除。drop_duplicates()函数有助于从DataFrame中删除重复的数据。

Pandas drop_duplicates()函数返回已删除重复行的DataFrame。

要从DataFrame移除 重复的 ,请使用Pandas DataFrame drop_duplicates()

语法

DataFrame.drop_duplicates(subset=None, keep=first’, inplace=False)

参数

它有以下参数:

  • subset:它需要一个列或列的列表。默认情况下,它不接受任何列。在传递列之后,它将只考虑它们的重复。

  • keep:它是用来控制如何考虑重复的值。它可以有3个值。'y默认,它是'第一'。所有'三个值的含义是:

    • 1 - 'first' - 它认为第一个值是唯一的,其余相同的值是重复的。
    • 2 - 'last' - 它认为最后一个值是唯一的,其余相同的值是重复的。
    • 3 - False - 如果是false,它认为所有相同的值都是重复的。
  • inplace:它接受布尔值,如果为真,则删除有重复的行。

返回值

drop_duplicates()函数返回已删除重复行的DataFrame,如果inplace=True则返回None

drop_duplicates()的示例程序

写一个程序来展示drop_duplicates()的工作原理:

import pandas as pd

data_dict = {"Name": ["Rohit", "Karan", "Shivam", "Karan"],  
"Age": [21, 23, 31, 23],"City":["Patna","Kolkata","Mumbai","Kolkata"]}  
df = pd.DataFrame(data_dict)  
print(df) 
df2 = df.drop_duplicates()  
print("\n After removal of duplicate rows:\n")
print(df2)

输出

 Name  Age     City
0   Rohit   21    Patna
1   Karan   23  Kolkata
2  Shivam   31   Mumbai
3   Karan   23  Kolkata

 After removal of duplicate rows:

     Name  Age     City
0   Rohit   21    Patna
1   Karan   23  Kolkata
2  Shivam   31   Mumbai

在上面的例子中,我们可以看到,我们有2条重复的记录,学生 名字是Karan。因此,使用drop_duplicates()后,我们可以删除重复的行。

例2:写一个程序,使用drop_duplicates()删除某一列中的重复行

请看下面的代码:

import pandas as pd

data_dict = {"Name": ["Rohit", "Karan", "Shivam", "Ajit"],
             "Age": [21, 23, 31, 23], "City": ["Patna", "Kolkata", "Mumbai", "Kolkata"]}
df = pd.DataFrame(data_dict)
print(df)
df.drop_duplicates(subset="City",
                   keep=False, inplace=True)
print("\nDataFrame after removing students belonging to same city:\n", df)

输出

 Name  Age     City
0   Rohit   21    Patna
1   Karan   23  Kolkata
2  Shivam   31   Mumbai
3    Ajit   23  Kolkata

DataFrame after removing students belonging to same city:
      Name  Age    City
0   Rohit   21   Patna
2  Shivam   31  Mumbai

在上面的例子中,我们可以看到Karan和Ajitwe'veng到了同一个城市,Kolkata。

因此,我们只考虑了"城市 " 这一列,而忽略了其他所有的事实。之后,我们打印了 结果的DataFrame。

删除重复的数据并保留最后一行

要保留最后一行并删除所有其他重复的行,使用keep='last'作为参数:

import pandas as pd

data_dict = {"Name": ["Rohit", "Karan", "Shivam", "Ajit", "Ajit"],
             "Age": [21, 23, 31, 23, 23], "City": ["Patna", "Kolkata", "Mumbai", "Kolkata", "Kolkata"]}
df = pd.DataFrame(data_dict)
print(df)
df.drop_duplicates(subset="City",
                   keep='last', inplace=True)
print("\nDataFrame after removing students belonging to same city:\n", df)

输出

    Name  Age     City
0   Rohit   21    Patna
1   Karan   23  Kolkata
2  Shivam   31   Mumbai
3    Ajit   23  Kolkata
4    Ajit   23  Kolkata

DataFrame after removing students belonging to same city:
      Name  Age     City
0   Rohit   21    Patna
2  Shivam   31   Mumbai
4    Ajit   23  Kolkata

在这个例子中,我们正在删除基于城市的记录。

在我们的DataFrame中,city = 'Kolkata'出现了三次,所以它将删除两个不会,我们已经通过keep=last,所以它不会删除最后一行。

你可以看到,索引行1和3被移除,而第4行因为keep='last'而没有被移除。

根据特定的列删除重复的行

我们必须通过列表子集参数来移除基于特定列的重复行。列表值是列名;你 不传递单列,就不必给出列表,但如果你有多列,你需要给出包含列名的列表。

import pandas as pd

data_dict = {"Name": ["Rohit", "Karan", "Shivam", "Ajit", "Ajit"],
             "Age": [21, 23, 31, 23, 23], "City": ["Patna", "Kolkata", "Mumbai", "Kolkata", "Kolkata"]}
df = pd.DataFrame(data_dict)
print(df)
df.drop_duplicates(subset=["City", "Age"],
                   keep='last', inplace=True)
print("\nDataFrame after removing students belonging to same city and age:\n", df)

输出

  Name  Age     City
0   Rohit   21    Patna
1   Karan   23  Kolkata
2  Shivam   31   Mumbai
3    Ajit   23  Kolkata
4    Ajit   23  Kolkata

DataFrame after removing students belonging to same city:
      Name  Age     City
0   Rohit   21    Patna
2  Shivam   31   Mumbai
4    Ajit   23  Kolkata

在这个例子中,我们传递了两列;基于这些列,我们将删除重复的行。我们把AgeCity 作为列名,并根据这些列的值删除记录。

结论

drop_dupDataFrame'只保存DataFrame的唯一值。如果你想从DataFrame中获取唯一的行,请使用df.drop_duplicates()方法。