目录
所有列是否完全重复
指定某一列是否重复
根据多列判断是否重复,防止误删数据
其他数据预处理方法
通过八爪鱼或者火车头等采集器从全网抓取的数据中,总会存在各种各样的重复数据,为保证数据在使用过程中的准确性,总要先进行一番清洗。
所有列是否完全重复
在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'])#去掉重复行
运行结果:
望指正!
其他数据预处理方法
拉格朗日插值法补充缺失值
连续数据离散化(等宽、等频、聚类离散)
数据预处理 - 归一化与标准化