详解pandas使用drop_duplicates去除DataFrame重复项参数
在数据处理中,数据重复往往会对统计结果产生影响,所以对重复数据进行处理是非常必要的。Pandas中提供了drop_duplicates方法用于去除DataFrame中的重复项。
drop_duplicates方法用法如下:
df.drop_duplicates(subset=None, keep='first', inplace=False)
其中,参数subset用于指定要判断重复的列,如果不指定,则判断整个行是否重复。参数keep用于指定删除哪些重复项,默认保留 个重复项,可以设置为last保留最后一个重复项或者False全部删除。参数inplace可以设置为True表示直接在原DataFrame上修改,否则返回一个新的DataFrame。
下面通过一个示例来详解drop_duplicates的使用。
示例数据:
import pandas as pd
data = {
'name': ['张三', '李四', '王五', '张三', '赵六', '李四', '张三'],
'age': [20, 21, 22, 20, 23, 21, 20],
'gender': ['男', '女', '男', '男', '女', '女', '男'],
'score': [90, 80, 70, 90, 60, 80, 90]
}
df = pd.DataFrame(data)
打印出来的DataFrame如下:
| | name | age | gender | score |
|---:|:------:|:-----:|:--------:|:-------:|
|0 |张三 |20 |男 |90 |
|1 |李四 |21 |女 |80 |
|2 |王五 |22 |男 |70 |
|3 |张三 |20 |男 |90 |
|4 |赵六 |23 |女 |60 |
|5 |李四 |21 |女 |80 |
|6 |张三 |20 |男 |90 |
从上面的DataFrame中可以看出,第0行和第3行、第1行和第5行、第6行和第0、3行都是重复的。
1. 删除整行重复项
如果我们要删除整行重复的数据,直接使用drop_duplicates方法即可,不需要指定subset参数。
df.drop_duplicates()
执行完上面的语句后,得到的DataFrame如下:
| | name | age | gender | score |
|---:|:------:|:-----:|:--------:|:-------:|
|0 |张三 |20 |男 |90 |
|1 |李四 |21 |女 |80 |
|2 |王五 |22 |男 |70 |
|4 |赵六 |23 |女 |60 |
可以看出,整行重复的数据已经被删除了,只保留了 个出现的数据。
2. 指定列判断重复项
有时候,我们只需要指定某几列判断是否重复,可以使用subset参数来指定要判断的列。
例如,我们只需要根据name和gender这两列判断是否重复,可以这样写:
df.drop_duplicates(subset=['name', 'gender'])
执行完上面的语句后,得到的DataFrame如下:
| | name | age | gender | score |
|---:|:------:|:-----:|:--------:|:-------:|
|0 |张三 |20 |男 |90 |
|1 |李四 |21 |女 |80 |
|2 |王五 |22 |男 |70 |
|4 |赵六 |23 |女 |60 |
可以看出,只保留了name和gender都不相同的行,第0和第3行是name和gender都相同的,所以只保留了 个出现的。
3. 保留最后一个重复项
默认情况下,drop_duplicates方法会保留 个出现的重复项,如果想要保留最后一个重复项,可以将keep参数设置为last。
例如,我们要根据name和gender这两列判断是否重复,保留最后一个重复项,可以这样写:
df.drop_duplicates(subset=['name', 'gender'], keep='last')
执行完上面的语句后,得到的DataFrame如下:
| | name | age | gender | score |
|---:|:------:|:-----:|:--------:|:-------:|
|2 |王五 |22 |男 |70 |
|4 |赵六 |23 |女 |60 |
|5 |李四 |21 |女 |80 |
|6 |张三 |20 |男 |90 |
可以看出,只保留了每一组name和gender都相同的数据中的最后一个。
4. 直接在原DataFrame上删除重复项
默认情况下,drop_duplicates方法不会修改原DataFrame,而是返回一个新的DataFrame。如果想要直接在原DataFrame上删除重复项,可以将inplace参数设置为True。
例如,我们要删除整行重复的数据,并直接在原DataFrame上修改,可以这样写:
df.drop_duplicates(inplace=True)
执行完上面的语句后,df的值如下:
| | name | age | gender | score |
|---:|:------:|:-----:|:--------:|:-------:|
|0 |张三 |20 |男 |90 |
|1 |李四 |21 |女 |80 |
|2 |王五 |22 |男 |70 |
|4 |赵六 |23 |女 |60 |
可以看出,df的值已经被修改了。
