Pandas去重函数:drop_duplicates()
Panda DataFrame 对象提供了一个数据去重的函数 drop_duplicates(),本节对该函数的用法做详细介绍。
函数格式
drop_duplicates()函数的语法格式如下:df.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)
参数说明如下:
subset:表示要进去重的列名,默认为 None。
keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只保留次出现的重复项,删除其余重复项,last 表示只保留一次出现的重复项,False 则表示删除所有重复项。
inplace:布尔值参数,默认为 False 表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。
实际应用
首先创建一个包含有重复值的 DataFrame 对象,如下所示:
import pandas as pd
data={
'A':[1,0,1,1],
'B':[0,2,5,0],
'C':[4,0,4,4],
'D':[1,0,1,1]
}
df=pd.DataFrame(data=data)
print(df)
输出结果:
A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1
3 1 0 4 1
1) 默认保留次出现的重复项
输出结果:import pandas as pd
data={
'A':[1,0,1,1],
'B':[0,2,5,0],
'C':[4,0,4,4],
'D':[1,0,1,1]
}
df=pd.DataFrame(data=data)
#默认保留次出现的重复项
df.drop_duplicates()
A B C D
0 1 0 4 1
1 0 2 0 0
2 1 5 4 1
2) keep=False删除所有重复项
import pandas as pd
data={
'A':[1,0,1,1],
'B':[0,2,5,0],
'C':[4,0,4,4],
'D':[1,0,1,1]
}
df=pd.DataFrame(data=data)
#默认保留次出现的重复项
df.drop_duplicates(keep=False)
输出结果:
A B C D
1 0 2 0 0
2 1 5 4 1
3) 根据指定列标签去重
import pandas as pd
data={
'A':[1,3,3,3],
'B':[0,1,2,0],
'C':[4,5,4,4],
'D':[3,3,3,3]
}
df=pd.DataFrame(data=data)
#去除所有重复项,对于B列来说两个0是重复项
df.drop_duplicates(subset=['B'],keep=False)
#简写,省去subset参数
#df.drop_duplicates(['B'],keep=False)
print(df)
输出结果:
A B C D
1 3 1 5 3
2 3 2 4 3
从上述示例可以看出,删除重复项后,行标签使用的数字是原来的,并没有从 0 重新开始,那么我们应该怎么从 0 重置索引呢?Pandas 提供的 reset_index() 函数会直接使用重置后的索引。如下所示:
import pandas as pd
data={
'A':[1,3,3,3],
'B':[0,1,2,0],
'C':[4,5,4,4],
'D':[3,3,3,3]
}
df=pd.DataFrame(data=data)
#去除所有重复项,对于B来说两个0是重复项
df=df.drop_duplicates(subset=['B'],keep=False)
#重置索引,从0重新开始
df.reset_index(drop=True)
输出结果:
A B C D
0 3 1 5 3
1 3 2 4 3
4) 指定多列同时去重
创建一个 DataFrame 对象,如下所示:
import numpy as np
import pandas as pd
df = pd.DataFrame({'Country ID':[1,1,2,12,34,23,45,34,23,12,2,3,4,1],
'Age':[12,12,15,18, 19, 25, 21, 25, 25, 18, 25,12,32,18],
'Group ID':['a','z','c','a','b','s','d','a','b','s','a','d','a','f']})
#last只保留一个重复项
df.drop_duplicates(['Age','Group ID'],keep='last')
输出结果:
Country ID Age Group ID
0 1 12 a
1 1 12 z
2 2 15 c
3 3 18 a
4 4 19 b
5 3 25 s
6 4 21 d
8 2 25 b
9 1 18 s
10 2 25 a
11 3 12 d
12 4 32 a
13 1 18 f
上述数据集中,第 7 行、第 10 行对应的列标签数据相同,我们使用参数值“last”保留一个重复项,也就是第 10 行数据。
- 随机文章
- 北京 昌平 马尔代夫(昌平国贸饭店推全新马尔代夫主题房,度假不再需要出国!)
- 马尔代夫黑白官刀(马尔代夫警方查获大量非法黑白官刀)
- 景甜 马尔代夫(景甜的马尔代夫之旅)
- 塞班马尔代夫蜜月(一场完美塞班马:浪漫满屋式蜜月体验)
- 南方 马尔代夫(南方旅游胜地 马尔代夫的新动态)
- 云南马尔代夫介绍(云南小镇“马尔代夫”,净水见证美景)
- 咸阳马尔代夫散步(咸阳市民悠闲马代漫步,畅享度假时光)
- 国内马尔代夫航班(国内首飞|海南航空喜提马尔代夫航线)
- 杭州马尔代夫公司(杭州马尔代夫公司:梦幻海岛度假胜地)
- 高陵区的马尔代夫(高陵区旅游推介:感受马尔代夫风情)
- 塞班 马尔代夫 好玩吗(探索塞班和马尔代夫的乐趣)
- 中国 马尔代夫 军事(中马军事合作深入,战略意义凸显)
- 军舰 马尔代夫(马尔代夫海军将添一艘战舰)
- 海东马尔代夫签证(海东居民前往马尔代夫需知的签证要求)
- 德阳中国马尔代夫(德阳造出中国版马尔代夫,又名水晶湖)
- 色彩马尔代夫作品(美丽的马尔代夫:色彩缤纷的海底世界)
- 类似马尔代夫岛屿(海上天堂:像马尔代夫一样的岛屿体验)
- 国航 马尔代夫(国航复航马尔代夫,增加海岛旅游选择)
- 温州号称马尔代夫(温州旅游局称温州打造中国版马尔代夫)
- 海南马尔代夫公交(海南岛公交一日游,仿佛置身马尔代夫)
- 眉山马尔代夫风景(眉山美不输马尔代夫,盘点眉山美景!)
- 大连 马尔代夫(大连游客可直飞马尔代夫,度假轻松了!)
- 嵊泗 马尔代夫(从嵊泗到马尔代夫:一个旅行家的海岛之旅)
- 观海长廊马尔代夫(观海长廊:探索马尔代夫海洋奇妙世界)
- 美国马尔代夫平替(美国完成马尔代夫国家领导层平稳过渡)
- 荷兰 马尔代夫(荷兰与马尔代夫:加强合作深化友谊)
- 长沙出发马尔代夫(长沙直飞马尔代夫,畅享美丽海岛体验)
- 邻水人的马尔代夫(邻水居民游马尔代夫,度假胜地受青睐)
- 马尔代夫中部酒店(马尔代夫中部酒店:瑰丽海景华丽再现)
- 长沙 马尔代夫(长沙游客暑期热衷赴马尔代夫,人数大增!)
