通常将数据导入到pandas后我们会发现原始数据会有很多重复的值
今天一起来看下如何删除重复值:
![581c1064b0ff28b087f7f5f6892c5a6a.png](https://i-blog.csdnimg.cn/blog_migrate/036b3673e149849a215d02fee09966b8.jpeg)
需要重点掌握的知识点:
- 去除重复值可以根据一列,也可以根据多列
- 默认将结果赋给一个新对象,也建议这样操作
- 去重复跟索引没关系,只跟你传入的列标签有关系
- 保留第一次出现还是保留最后一次出现的数据,要看你的原始数据和需求
去除重复值
drop_duplicates
da.drop_duplicates(subset=None, keep='first', inplace=False)
subset:列标签或标签序列,可选, 默认使用所有列,只考虑某些列来识别重复项传入列标签或者列标签的序列
keep:{'first','last',False},默认'first'
- ``first``:删除第一次出现的重复项。
- ``last``:删除重复项,除了最后一次出现。
- "false":删除所有重复项。
inplace:是否替换原数据,默认是生成新的对象,可以复制到新的DataFrame,如果设置为True则乎替换原有数据,通常不建议设置为True
当keep为“first":
pandas会留下第一次出现的值,后面出现的重复的均会被删除
import pandas as pd data={'state':[1,1,2,2,1,2,2],'pop':['a','b','c','d','b','c','d']}frame=pd.DataFrame(data) a= frame.drop_duplicates(subset=['pop'],keep='first')print(frame)print("="*30)print(a)
结果:
![3ed810aad0cf8738a1325419b2c2e76b.png](https://i-blog.csdnimg.cn/blog_migrate/133ad5beeca1cd52e3b1c9691fe5b0a3.jpeg)
当keep为“last":pandas会留下第后一次出现的值,前面出现的重复的均会被删除
a= frame.drop_duplicates(subset=['pop'],keep='last')
结果:
![25af2cbd9727d551fd360712e081817c.png](https://i-blog.csdnimg.cn/blog_migrate/29a7e579c79006298cdd10dbe69c0679.jpeg)
当keep为False:
pandas会删除所有的重复项,注意False不需要添加引号
a= frame.drop_duplicates(subset=['pop'],keep=False)
结果
![9fc4f2b48660f60c28facff4d7a4b06d.png](https://i-blog.csdnimg.cn/blog_migrate/92de66f70bd53c7e1574db65fdfdd257.jpeg)
inplace:布尔值
当设置inplace为True时,不需要再复制给新对象,会改变原始的数据
print(frame)frame.drop_duplicates(subset=['pop'],keep="last