case1.1:可以通过列表中索引(index)的方法保证去重后的顺序不变
case2:使用循环查找的方式,不改变顺序
case3:通过删除索引
case4:itertools.groupby
case5:fromkeys
case6:reduce方法
Python 第19课:数据清洗之去错、去空、去重
时间 2019-02-01 下午3:30
主讲 刘培富
地点 四楼电教室
数据清洗是数据治理的关键环节,是指对获取的原始数据(也称“脏数据”)进行审查、校验、加工的过程,目的在于删除重复信息、纠正错误信息,保持数据一致性。
一般来说,数据清洗,主要是对数据进行去错、去空、去重处理。
针对一张包含姓名、身份证号码、车牌号码的数据表,建立纠错规则如下:
1.车牌号既不包含汉字赣,且不包含汉字饶。
2.身份证号码的年份既不等于19也不等于20,身份证号码的月份大于12,身份证号码的日期大于31。
3.身份证号码位数不等于18。
4.姓名的长度小于等于1。
二、去空
对于关键性数据,不允许为空,对于这类数据,要查询是否存在空值。
三、去重
在一张表中,有的数据列允许重复,有的数据列则不允许重复。例如,对于一张车主信息表来说,姓名、身份证号可以重复,因为存在一人登记多辆车的情形,这种重复,不能认为是错误。但是,车牌号则不允许重复,否则就存在业务逻辑的错误。所以,针对车牌号数据列,要进行去重。
通过以下SQL语句,可以列出重复的数据:
综上,数据清洗,既要懂技术,更要懂业务,否则无法正确制定清洗规则,导致数据清洗流于形式,达不到清洗的效果。
df.drop_duplicates('item_name')
方法一:
df.drop_duplicates('item_name').count()
方法二:
df['item_name'].nunique()
结果:50
附:nunique()和unique()的区别:
unique()是以 数组形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)
nunique()即返回的是唯一值的个数
比如:df['item_name'].unique()
要求:将下表中经验列将按周统计的转换为经验不限,保留学历
df1['经验'] = df1['经验'].apply(lambda x: '经验不限'+ x[-2:] if '周' in x else x)
#解释:将‘5天/周6个月’变成‘经验不限’,然后保留学历‘本科’
方法二:定义函数
def dataInterval(ss):
if '周' in ss:
return '经验不限'+ ss[-2:]
return ss
df1['经验'] = df1['经验'].apply(dataInterval)