Python数据分析基础与应用电子活页5-7使用drop_duplicates()函数.docx
Python数据分析基础与应用
模块
PAGE4
PAGE3
电子活页5-7使用drop_duplicates()函数删除数据集中的重复值
【技能训练5-9】使用drop_duplicates()函数删除数据集中的重复值
【训练要求】
在JupyterNotebook开发环境中创建j5-09.ipynb,然后编写代码使用drop_duplicates()函数删除数据集中的重复值。
【实施过程】
(1)创建一个包含重复值的DataFrame对象
代码如下:
importpandasaspd
data1={name:[安静,路远,温暖,安静,阳光,安静],
sex:[女,男,男,女,男,女],
age:[21,20,19,21,23,21],
height:[171,180,189,171,175,171]}
df1=pd.DataFrame(data1)
df1
输出结果:
(2)默认保留第一次出现的重复值
代码如下:
df2=df1.drop_duplicates()
df2
输出结果:
代码df1.drop_duplicates()的输出结果与代码df1.drop_duplicates(keep=first)的相同,因为该函数默认只保存第一次出现的重复值。
(3)保留最后一次出现的重复值
代码如下:
df2=df1.drop_duplicates(keep=last)
df2
输出结果:
(4)设置参数keep=False删除所有重复值
代码如下:
df1.drop_duplicates(keep=False)
输出结果:
(5)根据指定列索引去重
代码如下:
importpandasaspd
data3={
date:[2022/1/1,2022/1/2,2022/1/3,2022/1/4,2022/1/5,
2022/1/6,2022/1/7,2022/1/8],
highT:[12,15,12,12,7,6,7,6],
lowT:[1,4,8,6,5,5,6,3],
AQI:[167,145,123,212,104,61,54,70]
}
df3=pd.DataFrame(data=data3)
df3
输出结果:
代码如下:
#删除所有重复值,对于highT列来说3个12、2个6、2个7都是重复值
df4=df3.drop_duplicates(subset=[highT],keep=False)
df4
输出结果:
可以省略subset关键字,将上述代码简写为以下形式:
df4=df3.drop_duplicates([highT],keep=False)
(6)去重时重置索引
从上述代码可以看出,删除重复值后,行索引使用的数字与原来的相同,并没有从0重新开始,那么应该怎么在去重时重置索引呢?使用pandas提供的reset_index()函数直接重置索引即可。
去重的代码如下:
df5=df3.drop_duplicates(subset=[lowT],keep=False)
df5
输出结果:
重置索引的代码如下:
#重置索引,从0重新开始
df6=df5.reset_index(drop=True)
df6
输出结果:
(7)指定多列去重
创建DataFrame对象的代码如下:
importpandasaspd
data7={
date:[2022/1/1,2022/1/2,2022/1/3,2022/1/4,2022/1/5,
2022/1/6,2022/1/7,2022/1/8],
highT:[12,15,12,12,6,6,7,6],
lowT:[1,4,8,6,5,5,6,3],
AQI:[167,145,123,212,104,61,54,70]
}
df7=pd.DataFrame(data=data7)
df7
输出结果:
指定多列去重的代码如下:
#使用keep=last只保留最后一个重复值
df8=df7.drop_duplicates([highT,lowT],keep=last)
df8
输出结果:
上述数据集中,索引为4、5的两条记录的highT列、lowT列的数据完全相同,使用参数值last保留最后一个重复值,也就是索引为5的记录被保留,索引为4的记录被删除。