详解pandas.drop_duplicates()(删除重复值)函数使用方法

  • Post category:Python

下面我将详细讲解pandas.drop_duplicates() 的作用与使用方法的完整攻略。

pandas.drop_duplicates()的作用

pandas.drop_duplicates() 方法是 pandas 库中用于去除重复行的一个函数。它可以用来删除数据框中全列或部分列的重复数据,返回一个新的数据框。

pandas.drop_duplicates()的语法

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

参数:

  • subset:可选参数,表示需要去重的列。默认是全部列。可以传递列的名称或序号列表。
  • keep:可选参数,表示保留哪一行作为重复项。有三种取值:
    • first:保留第一个出现的重复项,删除后面出现的。
    • last:保留最后一个出现的重复项,删除前面的。
    • False:删除所有重复项。
  • inplace:可选参数,是否在原来的 DataFrame 上替换去重后的结果,默认为 False。
  • ignore_index:可选参数,当 inplace 为 True 时,是否重新生成索引,默认为 False。

使用方法

示例1

接下来,我们使用一个示例来说明 drop_duplicates 的用法:

假如我们有一个包含重复行的数据框:

import pandas as pd

data = pd.DataFrame({'name': ['Tom', 'Jerry', 'Mario', 'Tom'], 'age': [20, 21, 20, 22], 'gender': ['M', 'M', 'M', 'M']})
print(data)

输出为:

    name  age gender
0    Tom   20      M
1  Jerry   21      M
2  Mario   20      M
3    Tom   22      M

我们想要删除所有的重复行,那么我们可以直接使用 drop_duplicates() 方法,不传递任何参数:

data_without_duplicates = data.drop_duplicates()
print(data_without_duplicates)

输出为:

    name  age gender
0    Tom   20      M
1  Jerry   21      M
2  Mario   20      M
3    Tom   22      M

我们发现即使我们传递了所有的参数默认值,该方法仍然按照所有列的值来判断一个行是否是重复的,并将所有的重复行删除。

示例2

现在我们来看一个稍微复杂的示例。假如我们有一个记录了网站用户登录记录的数据框:

用户名 登录时间 登录 IP
Tom 2019-01-01 192.168.1.1
Jerry 2019-01-02 192.168.1.2
Tom 2019-01-01 192.168.1.3
Mario 2019-01-03 192.168.1.4

如果我们要去重,但是只根据用户名和登录时间去重,我们可以这样写:

import pandas as pd

data = pd.DataFrame({'username': ['Tom', 'Jerry', 'Tom', 'Mario'], 'login_time': ['2019-01-01', '2019-01-02', '2019-01-01', '2019-01-03'], 'login_ip': ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4']})
print(data)

data_without_duplicates = data.drop_duplicates(subset=['username', 'login_time'])
print(data_without_duplicates)

输出为:

  username login_time     login_ip
0      Tom 2019-01-01  192.168.1.1
1    Jerry 2019-01-02  192.168.1.2
2      Tom 2019-01-01  192.168.1.3
3    Mario 2019-01-03  192.168.1.4

  username login_time     login_ip
0      Tom 2019-01-01  192.168.1.1
1    Jerry 2019-01-02  192.168.1.2
3    Mario 2019-01-03  192.168.1.4

我们可以看到,使用了 subset 参数之后,drop_duplicates 方法只根据指定的用户名和登录时间这两列来进行去重,而不是全列去重。

总结

总的来说,pandas.drop_duplicates() 方法非常简单易用,需要去重处理的情况下是 pandas 库中一种容易被使用的方法。