数据清洗

数据清洗

1  定义

  数据清洗是从记录表、表格、数据库中检测、纠正或删除损坏或不准确记录的过程

      专有名词

    脏数据

    未经过处理,自身含有一部分问题的数据

    干净数据

    完全符合要求的数据

2 基本流程

  1  读取外部的数据  read_csv(读取txt以及csv文件)、read_excel(读取excel文件、)read_sql(从sql获取数据)、read_html(从网页获取数据)

  2  数据概览(大概了解)  index columns head tail shape describe info dtypes

  3  简单处理  移除首尾空格 大小写转换

  4  重复值处理  drop_duplicates()删除重复数据

  h5  缺失值处理  删除或者填充

  6  异常值处理  删除或是修正

  7  字符串处理  切割、筛选

  8  时间格式处理  时间格式是否正确

  9  收尾处理   表格规范化处理

3  数据概览

  文件.columns  查看字段是否符合规范,如字段首尾是否有空格

  文件.info    查看数据的类型,比(文件.dtypes)更加全面

  文件.describe  快速统计

  文件.shape   查看行列数

  文件.head/tail  查看首尾

4  简单处理

  查看是否有无用的列,进行删除  文件.drop(colunms['字段名称'],inplace=True)  添加inplace=True 确认操作

  列字段首尾空格处理  首先获取列字段的  变量名 = 文件名.columns.values  然后循环取出字段名,使用字符串的strip去除空格

5  去重

  文件名.duplicated()可以判读是否重复,结果为bool值,重复为ture 可以用 文件名.duplicated().sum()对重复数据的数量进行统计

  文件名[文件名.duplicated()]  布尔值索引,可以获取重复数据的详细数据

  文件名.drop_duplicates(inplace=True)  删除重复数据

  检查数据是否删除可以使用shape,对先后的行列数进行比较

6  数据填充

  有些缺失的数据可以在其他列中找到,可以筛选出所需数据进行填充  方法  字符串的切片、字符串切割、正则筛选

  文件名.isnull().sum()  统计每个字段缺失数据条数

  文件名[文件名.字段名.isnull()]  利用布尔值索引筛选出相关字段有缺失的数据

  使用相关方法筛选数据,并填充入空格

  操作数据的列字段需要使用loc方法  列如  df.loc[df.出发地.isnull(),'出发地'] = [i.split('-')[0] for i in df.loc[df.出发地.isnull(),'路线名'].values]

  无法找到可以采用其他公式进行填充,也可以选择删除

7  异常值处理

# 利用快速统计大致筛选出可能有异常数据的字段
# df.describe()  # 价格小于节省 那么可能是价格有问题或者节省有问题

# 利用公式求证我们的猜想
sd = (df['价格'] - df['价格'].mean()) / df['价格'].std()  # 判断的标准
# 利用逻辑索引筛选数据
df[(sd > 3)|(sd < -3)]
# 利用绝对值
df[abs(sd) > 3]  # abs就是绝对值的意思(移除正负号)

# 同理验证节省是否有异常(不一定要使用)
# sd1 = (df['节省'] - df['节省'].mean()) / df['节省'].std()  # 判断的标准
# 利用逻辑索引筛选数据
# df[(sd > 3)|(sd < -3)]
# 利用绝对值
# df[abs(sd1) > 3]  # abs就是绝对值的意思(移除正负号)

# 直接简单粗暴找节省大于价格的数据(推荐下列方式)
df[df['节省'] > df['价格']]



# 删除价格和节省都有异常的数据
# 方式1:先拼接 再一次性删除
# 横向合并pd.merge()
# 纵向合并pd.concat()
# res = pd.concat([df[df['节省'] > df['价格']],df[abs(sd) > 3]])
## 获取要删除的行数据 索引值
# del_index = res.index
# 根据索引删除数据
df.drop(index=del_index,inplace=True)
# 再次重置索引
df.index = range(0,df.shape[0])
# 方式2: 得出一个结果就删一个

9  首尾操作

# 8.行索引会不会因为数据的删除而自动重置(删除完数据之后行索引是不会自动重置的)
## 如何获取表的行索引值
# df.index
## 右侧加上赋值符号就是修改行索引值
# df.index = range(0,df.shape[0])
df.tail()

 

posted @ 2021-10-20 23:57  aa_wang  阅读(278)  评论(0)    收藏  举报