数据清洗,如何处理完全重复或部分重复的数据?
发布于 作者:苏南大叔 来源:程序如此灵动~

上一篇文章中,苏南大叔所描述的例子,侧重于字段名重复,而并不是关心对应字段的数据。而本篇文章中,则更加关注于数据本身。即横向的一条数据,用于描述某个个体特征的一条数据。如果两条(甚至多条)数据重复。该如何处理数据呢?

大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。本文测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
。
前置阅读
下面的文章是前置阅读内容:
本文侧重的是传统意义上的数据重复,即描述单条数据的目标特征都相同,这就是本文的主要研究标的物。
龙套角色
这里不考虑列名重复的情况,而是仅仅考虑数据表中横向一条数据的情况。
注意:横向的数据中,不包括索引。在excel
文件或者mysql
表里面,索引的值也是一个字段。但是,这并不是本文数据重复的目标判断标准。所以从excel
转化得到的dataframe
,需要特别注意转化的参数。
下面的excel
文件,是本文的龙套。

读取它内容的测试代码如下:
读取的结果如下:
nunique(),唯一值统计
注意写法,方法名称是:n
+unique()
。
输出:
可见,这个.nunique()
方法的主要作用就是获得每个字段里面的唯一值的总数。
duplicated(),重复性检测
这里默认就是全部字段进行匹配的,也就是说完全重复的。所以,只有数据6的返回值是True
。
输出:
重复的标准,subset
再次重申,重复的标准:
- 不包括索引键【例如
id
】。 - 某几个字段重复,如果场景允许,可以算重复。
- 全部字段重复,当然算数据重复。
对比这个文件,可以看到:
- 数据2和数据6是完全重复的。
- 数据3和数据5是部分重复的。
- 数据4和数据2/6是部分重复的。
输出:
数据流的方向,keep
也可以使用keep='last'
,使得数据流的方向进行逆转,从后往前匹配。所以,数据2变成了True
。
输出:
drop_duplicates()
如果理解了.duplicated()
,这个.drop_duplicates()
就非常好理解了。就是把重复的值(为True
)的数据删除掉。
输出:
输出:
输出:
结束语
对重复数据进行适当清理之后,需要做的就是数据修复了。更多苏南大叔的python
经验文章,请参考下面的链接。


