Python数据预处理 - 清洗你见过的各种类型的重复

目录

所有列是否完全重复

指定某一列是否重复

根据多列判断是否重复,防止误删数据



通过八爪鱼或者火车头等采集器从全网抓取的数据中,总会存在各种各样的重复数据,为保证数据在使用过程中的准确性,总要先进行一番清洗。

所有列是否完全重复

在Pandas中,.duplicated()表示找出重复的行,默认是判断全部列,返回布尔类型的结果。对于完全没有重复的行,返回 False,对于有重复的行,第一次出现的那一行返回 False,其余的返回 True。

与.duplicated()对应的,.drop_duplicates()表示去重,即删除布尔类型为 True的所有行,默认是判断全部列。

import pandas as pd
import numpy as np
from pandas import DataFrame,Series

#读取文件
datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csv
examDf = DataFrame(data)
examDf#输出源数据,直观的查看哪些行是重复的

运行结果: 

  name height birthday constellation Blood
0 Jay 175 1979 摩羯座 O
1 Jay 175 1979 摩羯座 O
2 Jolin 156 1980 处女座 A
3 Jolin 156 1980 NaN A
4 Hannah 165 1993 狮子座 B
5 JJ 173 1981 白羊座 O
6 Eason 173 1974 狮子座 O

很明显,第 0 行和第 1 行是完全重复的,开始去重,接着上面的代码,

#去重
print(examDf.duplicated())#判断是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates()#去掉重复行

指定某一列是否重复

上述的数据中我们可以发现,第 2 行和第 3 行其实都是 Jolin 的信息,那么也是需要去重的。.duplicated()默认是判断全部列,那么加一点东西,就可以判断指定某一列了。

print(examDf.duplicated('name'))#判断name列是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates('name')#去掉重复行

运行结果:

                                      

在实际应用中,需要指定的这一列往往是合同号,项目编号这一类的

根据多列判断是否重复,防止误删数据

仅仅根据name列判断是否重复,难免会把重名的另一个人的信息误删,比如娱乐圈的杨洋(小鲜肉男)和杨洋(快女),仅根据name判断是否重复的话,肯定会将其中一人的信息判断为重复数据,那么就增加几个判断条件,比如根据姓名,性别,生日三个条件来判断的话,误删的几率就会大大的减少。

import pandas as pd
import numpy as np
from pandas import DataFrame,Series

#读取文件
datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csv
examDf = DataFrame(data)
print(examDf.duplicated(['name','sex','birthday']))#判断name,sex,birthday列是否有重复行,重复的显示为TRUE,
examDf.drop_duplicates(['name','sex','birthday'])#去掉重复行

运行结果:

                              

望指正!

猜你喜欢

转载自blog.csdn.net/weixin_40683253/article/details/81665896
今日推荐