如何在Pandas中找到并筛选重复行?

如何在Pandas中找到并筛选重复行?

在数据清洗和处理过程中,经常遇到需要找到并去除重复行的情况。在Pandas中,可以使用duplicated()函数来找到重复的行,然后使用drop_duplicates()函数来去除这些行。在本文中,我们将介绍如何在Pandas中找到并筛选重复行。

更多Pandas相关文章,请阅读:Pandas 教程

使用duplicated()函数找到重复行

duplicated()函数可以找到DataFrame或Series中的重复行。默认情况下,只有所有列值都相等的行才会被视为重复行。例如,假设我们有以下的DataFrame:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'Alice'],
        'age': [25, 30, 35, 25],
        'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)

输出结果为:

       name  age gender
0     Alice   25      F
1       Bob   30      M
2   Charlie   35      M
3     Alice   25      F

可以看到,第一个和第四个行是重复的,因为两行所有列的值都相等。我们可以使用duplicated()函数来找到这些行:

duplicates = df[df.duplicated()]
print(duplicates)

输出结果为:

    name  age gender
3  Alice   25      F

duplicated()函数返回一个布尔型的Series,表示每一行是否为重复行。把这个结果传递给DataFrame的索引器,就可以得到所有的重复行了。

需要注意的是,duplicated()函数默认对所有列进行比较。如果我们只想要根据某一列判断重复行,可以在函数调用时指定subset参数。例如,如果我们只想要根据name列来判断重复行,可以这样写:

duplicates = df[df.duplicated(subset=['name'])]
print(duplicates)

输出结果为:

    name  age gender
3  Alice   25      F

使用drop_duplicates()函数去除重复行

drop_duplicates()函数可以去除DataFrame或Series中的重复行。默认情况下,只有所有列值都相等的行才会被视为重复行。例如,如果我们要去除df中的重复行,可以这样写:

df = df.drop_duplicates()
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M

可以看到,第一个和第四个行已经被去除了。

需要注意的是,drop_duplicates()函数默认对所有列进行比较。如果我们只想要根据某一列去除重复行,可以在函数调用时指定subset参数。例如,如果我们只想要根据name列去除重复行,可以这样写:

df = df.drop_duplicates(subset=['name'])
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M

保留第一个或最后一个重复行

有时候我们需要保留第一个或最后一个重复行,可以使用keep参数来指定。如果keep参数为first,则保留第一个重复行;如果keep参数为last,则保留最后一个重复行。例如,假设我们有以下的DataFrame:

data = {'name': ['Alice', 'Bob', 'Charlie', 'Alice'],
        'age': [25, 30, 35, 40],
        'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M
3    Alice   40      F

如果我们只想要保留第一个重复行,可以这样写:

df = df.drop_duplicates(keep='first')
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M
3    Alice   40      F

可以看到,第一个重复行被保留了。

如果我们只想要保留最后一个重复行,可以这样写:

df = df.drop_duplicates(keep='last')
print(df)

输出结果为:

      name  age gender
1      Bob   30      M
2  Charlie   35      M
3    Alice   40      F

可以看到,第四个行被保留了。

针对特定列进行去重

上面的例子都是针对整个DataFrame进行去重操作。如果我们只想针对特定列进行去重,可以使用subset参数。例如,假设我们有以下的DataFrame:

data = {'name': ['Alice', 'Bob', 'Charlie', 'Alice'],
        'age': [25, 30, 35, 40],
        'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M
3    Alice   40      F

如果我们只想要根据name列去重,可以这样写:

df = df.drop_duplicates(subset=['name'])
print(df)

输出结果为:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   35      M

可以看到,只有name列被用来判断重复行。

忽略NaN值

默认情况下,duplicated()drop_duplicates()函数会将所有的NaN值都视为不同的值。例如,假设我们有以下的DataFrame:

data = {'name': ['Alice', 'Bob', 'Charlie', 'Alice'],
        'age': [25, 30, 35, None],
        'gender': ['F', 'M', 'M', 'F']}
df = pd.DataFrame(data)
print(df)

输出结果为:

      name   age gender
0    Alice  25.0      F
1      Bob  30.0      M
2  Charlie  35.0      M
3    Alice   NaN      F

可以看到,第四个行包含NaN值。如果我们使用duplicated()函数查找重复行,会得到以下的结果:

duplicates = df[df.duplicated()]
print(duplicates)

输出结果为:

    name   age gender
3  Alice  NaN      F

可以看到,第四个行被视为重复行了。

如果我们希望忽略NaN值,可以使用drop_duplicates()函数的keep参数来指定保留哪个NaN值。如果keep参数为first,则保留第一个出现的NaN值;如果keep参数为last,则保留最后一个出现的NaN值。例如,如果我们希望保留第一个出现的NaN值,可以这样写:

df = df.drop_duplicates(keep='first')
print(df)

输出结果为:

      name   age gender
0    Alice  25.0      F
1      Bob  30.0      M
2  Charlie  35.0      M
3    Alice   NaN      F

可以看到,第四个行被保留了。

结论

在本文中,我们介绍了如何在Pandas中找到并去除重复行。我们学习了duplicated()函数和drop_duplicates()函数的用法,并且掌握了如何针对特定列进行去重,以及如何忽略NaN值。在实际的数据处理过程中,去除重复行是一个非常常见的操作,掌握了Pandas中去重的技巧,可以使数据清洗和处理的效率得到很大提升。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程