11 数据清洗

在数据分析过程中,数据清洗在时间上占到了80%。

数据质量的准则(“完全合一”)

(1)完整性:单条数据是否存在空值,统计的字段是否完善。

(2)全面性:观察某一列的全部数值,通过常识来判断该列是否有问题。

(3)合法性:数据的类型、内容、大小的合法性。

(4)唯一性:数据是否存在重复记录

数据清理要使数据标准、赶紧、连续,为后续数据统计、数据挖掘做好准备。

1、完整性

问题1:缺失值

解决办法:①删除   ②均值   ③高频

df['Age'].fillna(df['Age'].mean(), inplace=True)              #均值

age_maxf = train_features['Age'].value_counts().index[0]
train_features['Age'].fillna(age_maxf, inplace=True)          #高频值

问题2:删除空行

# 删除全空的行(除了index外,其他都是空值)
df.dropna(how='all',inplace=True) 

2.全面性

问题:列数据的单位不统一

# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print df[rows_with_lbs]
# 将 lbs 转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
	# 截取从头开始到倒数第三个字符之前,即去掉 lbs。
	weight = int(float(lbs_row['weight'][:-3])/2.2)
	df.at[i,'weight'] = '{}kgs'.format(weight) 

3.合理性

问题:非ASCII字符

# 删除非 ASCII 字符
df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

4.唯一性

问题1:一列有多个参数

# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)

问题2:重复数据

# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值