栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据清洗的基本流程(数据的清洗与预处理)

数据清洗的基本流程(数据的清洗与预处理)

数据分析师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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号