pandas库中的drop_duplicates()函数简直就是去重的神器,该函数还可以在去重中人为设置保留靠前的记录还是靠后的记录。
DataFrame.drop_duplicates(self, subset=None, keep='first', inplace=False)[source]
一共有三个参数,subset、keep和inplace
subset参数
subset : column label or sequence of labels, optional
Only consider certain columns for identifying duplicates, by default use all of the columns
subset参数用来设置以哪些列的重复作为重复的标准,参数为列标签,如果不设置该值,则默认为以所有列作为重复的判断条件。
keep参数
keep : {‘first’, ‘last’, False}, default ‘first’
first : Drop duplicates except for the first occurrence.
last : Drop duplicates except for the last occurrence.
False : Drop all duplicates.
keep可以设置为三个参数,默认为first
first表示保留第一次出现的记录
last表示保留最后一次出现的记录
False表示把所有重复的删除
inplace参数
inplace : boolean, default False
Whether to drop duplicates in place or to return a copy
inplace可以设置为True或False,默认为False
True表示原地去重,会改变dataframe
False表示会返回一个新的dataframe,不会改变原来的变量
例子
import pandas as pd
data = pd.DataFrame([[1, 'Wang', 20], [2, 'Li', 20], [1, 'Wang', 21], [1, 'Wang', 20]], columns=['id', 'name', 'age'])
数据为
id name age
0 1 Wang 20
1 2 Li 20
2 1 Wang 21
3 1 Wang 20
很显然第0条和第3条记录重复,使用默认用法即可去除
print(data.drop_duplicates())
结果是
id name age
0 1 Wang 20
1 2 Li 20
2 1 Wang 21
很显然是保留了第0条记录,而去除了第3条记录,可通过设置keep参数为last使其保留后一条参数
print(data.drop_duplicates(keep='last'))
结果是
id name age
1 2 Li 20
2 1 Wang 21
3 1 Wang 20
同时对于数据集
id name age
0 1 Wang 20
1 2 Li 20
2 1 Wang 21
3 1 Wang 20
认为id和name相同即为重复的话,可以使用
print(data.drop_duplicates(['id', 'name']))
得到
id name age
0 1 Wang 20
1 2 Li 20
如果想把重复的数据都删除,则使用
print(data.drop_duplicates(['id', 'name'], keep=False))
得到
id name age
1 2 Li 20