![Python+Office:轻松实现Python办公自动化](https://wfqqreader-1252317822.image.myqcloud.com/cover/834/40107834/b_40107834.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.1 重复值的处理
4.1.1 Excel重复值的处理
Excel是处理数据时使用比较频繁的软件之一,有时我们需要删除重复数据,只保留一条数据,这时最简单的方法就是使用Excel自带的“删除重复值”功能。
具体操作如下:首先选择全部数据,然后单击“数据”选项卡中的“删除重复值”按钮,弹出“删除重复值”对话框,如图4-1所示。单击“确定”按钮,Excel会删除所有重复数据,并弹出提示信息对话框,再单击“确定”按钮即可。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_1.jpg?sign=1739329948-i0rFnyNj0c5y4l3FLDz1zhBgjmCRL0Y1-0-158bdfbea8082e7bc9531541553ccfd1)
图4-1 “删除重复值”对话框
4.1.2 Python重复值的检测
在介绍使用Pandas库处理重复数据之前,先创建一个关于4名学生学习成绩的数据集,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_2.jpg?sign=1739329948-sok4WDFbXD4k1tOtb42q6BMKn8HmgLbR-0-f6058301f5c00631cf33b1f4f81408fd)
运行上述代码,创建的数据集如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_3.jpg?sign=1739329948-meKsALoXQFeDxirIeIeAarqNBvneFwIU-0-e4a5f33bf8665753f3f5fc62937df1c7)
索引的is_unique属性可以判断它的值是否是唯一的,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_4.jpg?sign=1739329948-U1r8oN8Pw07mryN8py8Ed8fv8CeeYerN-0-b66419d693f2fe13c5b1b5448f6a208f)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_5.jpg?sign=1739329948-Q31oKUTuyjWg4sVHn4e6qG64hmJbAvNz-0-a629ca660ef79ebf7bbeb49b27d7e86a)
判断重复数据记录,duplicated()函数的返回值是一个布尔型,表示各行是否是重复行,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_6.jpg?sign=1739329948-HvjMcPhsCFHrrchT9NjhusmR5O1dsXgN-0-7d7623cbeba4300c052a7cb63a72859b)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_7.jpg?sign=1739329948-ji6nMC8vve9484Dng61I0LSqRteRmQcp-0-2dccbef289e236b53720a41bbd02bd71)
4.1.3 Python重复值的处理
下面删除数据集中数值相同的记录,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_8.jpg?sign=1739329948-Za0ISNsiiyWqqXqRj7jl1PiREOxvu44K-0-b542b1d778d110eb19f400ac85fe6857)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_9.jpg?sign=1739329948-uyGR46dJEmXiKdKWyxj5HNVbQwT5YgJQ-0-e3410e38f11a3c5f15566e180ea966e9)
在默认情况下,会判断全部列,也可以指定某一列或几列。例如,我们需要删除数据记录中某列数值相同的记录,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_10.jpg?sign=1739329948-JcZK8Urrp4A326IscHpodu20OhAtdHTU-0-5ebb75b307d6df01093fec1070ede4f1)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_11.jpg?sign=1739329948-GNJxckyHJemPT2Cewydrv3rOefv5jClm-0-ae035fa56a146f6d11100e533d894e02)
还可以删除数据记录中某几列数值相同的记录,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_12.jpg?sign=1739329948-duDsdYbvResLctES1xST7ZYJdsNUinG7-0-17ccb806637922607a36a0e13be86387)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_13.jpg?sign=1739329948-nIkDLxHlmj6E78n8YPlgKlkWGaOXpSdI-0-c4a9b457a096776dc8177b9b4708dd67)
duplicated()函数和drop_duplicates()函数默认保留的是第一次出现的值,但是也可以通过设置参数keep='last',保留最后一次出现的值,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_14.jpg?sign=1739329948-c1dQXv3IeydW7MepmoieJJ099idvxRYM-0-3f78b97c64599c7f709ae36f2a316712)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_15.jpg?sign=1739329948-6V4AHCURmDwxyAyr7CJ64P2cEGsnMtFw-0-66c759955317dcc068a5948eecb9c06e)
例如,删除score数据集中李四考试成绩中的重复值,并保留最后一次出现的值,由于数学和化学的成绩都是90分,所以只保留化学成绩,代码如下:
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_16.jpg?sign=1739329948-K6EWGobAWji3eGagRONdPMUkohcHMxSF-0-0cae1160922640472b02e482e243e11a)
代码输出结果如下所示。
![img](https://epubservercos.yuewen.com/450204/20862583108963306/epubprivate/OEBPS/Images/txt006_17.jpg?sign=1739329948-qnBZDyUDflACdN9g7ctkmyLSftXMwGM6-0-2ccf8d1504edf860050ac3984d10556d)