数据的清洗

数据分析师80%的时间都花在数据清洗上!

好的数据质量,应该满足“完全合一”

• 完整性:数据是否存在空值,字段是否完善,是否有漏掉

• 全面性:观察某一列的全部数值及特征值,是否存在单位、字段 名与数值不匹配

• 合法性:数据的类型、内容、大小的合法性。

• 唯一性:数据是否存在重复记录

问题1:缺失值

在数据中有些年龄、体重数值是缺失的,这往往是因为数据量较大,在过程中,有些数值没有采集 到。通常我们可以采用以下三种方法:

• 删除:删除数据缺失的记录;

• 均值:使用当前列的均值;

• 高频:使用当前列出现频率最高的数据。

比如我们想对df['Age']中缺失的数值用平均年龄进行填充,可以这样写: df['Age'].fillna(df['Age'].mean(), inplace=True)

问题2:空行

我们发现数据中有一个空行,除了 index 之外,全部的值都是 NaN。

Pandas 的 read_csv() 并没有可选参数来忽略空行,这样,我们就需要 在数据被读入之后再使用 dropna() 进行处理,删除空行。 # 删除全空的行 df.dropna(how= 'all' ,inplace=True)

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

weight列的数值,有的单位是千克 (kgs),有的单位是磅(lbs)。 这里统一将磅(lbs)转化为千克 (kgs): # 获取 weight 数据列中单位为 lbs 的数据 rows_with_lbs = df['weight'].str.contains('lbs').fillna(False) # 将 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)

问题4:非ASCII字符

如果文本中存在非 ASCII 的字符。我 们还需要进行删除或者替换。 这里使用对非ASCII字符进行删除方式 # 删除非 ASCII 字符 df['name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True

问题5:一列有多个参数(可选)

可以将Name分成last name + first name 也可以进行保留。 # 切分名字,删除源数据列 df[['first_name' , 'last_name']] = df['name'].str.split(expand=True) df.drop('name' , axis=1, inplace=True) 默认采用的空格进行分割,相当于df['name'].str.split(' ' , expand=True)

问题6:重复数据

我们校验一下数据中是否存在重复记 录。如果存在重复记录,就使用 Pandas 提供的 drop_duplicates() 来删 除重复数据。 # 删除重复数据行 df.drop_duplicates(['first_name' , 'last_name'],inplace=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值