Pandas数据清洗

在数据处理的过程中,很多数据集存在数据缺失、错误、异常等情况,这些数据被称为脏数据,数据清洗的过程就是处理这些脏数据的过程。如无特殊说明,本章所使用数据为 尿检结果.xls

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20200814220628.png
尿检结果
https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20201009145640.png
尿检结果2

异常处理

缺失数据处理

  1. isnull/isna
    Pandas 的isnull方法等于isna方法(推荐用isna),是用来判断缺失值的,如果返回True则该单元格为空,返回False则该单元格非空。
1
2
data['血红蛋白'].isna() # 找出该列所有缺失值
data[data['血红蛋白'].isna()] # 取出缺失值所在行
  1. notnull/notna
    Pandas 的notnull方法等于notna方法(推荐用notna),是用来判断非缺失值的,如果返回True则该单元格为非空,返回False则该单元格空。
1
2
data['血红蛋白'].notna() # 找出该列所有非缺失值
data[data['血红蛋白'].notna()] # 取出非缺失值所在行
  1. dropna
    本方法主要用于删除缺失值所在的行/列,函数原型和主要参数为:
1
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数 解释
how any代表删除所有存在缺失值的行/列,all表示删除全部为缺失值的行/列
thresh 某行/列的非空值超过thresh时不删除
subset 允许我们drop的行/列索引
  1. fillna
    本方法主要用于填充缺失值所在的行/列,函数原型和主要参数为:
1
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
参数 解释
value 用于填充空单元格的值
method 用缺失值后面(bfill)或前面(fill)的值填充
limit 最大填充次数

重复数据处理

  1. duplicated
    本方法主要用于查找重复值所在的行/列,将重复的数据设置为True,其函数原型和主要参数为:
1
DataFrame.duplicated(subset=None, keep='first')
参数 解释
subset 检查的列索引,默认检查所有
keep 第一次/最后一个重复值不设置为True;所有重复值设为True
  1. drop_duplicated
    本方法主要用于删除重复值所在的行/列,函数原型为函数原型和主要参数为:
1
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
参数 解释
subset 同上
keep 同上
inplace 是否在原数据上修改

数据合并

contact

本方法主要用于合并不同Pandas数据,函数原型和常用参数为1

1
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,keys=None, levels=None, names=None, erify_integrity=False, copy=True)
参数 类型 解释
objs DataFrame/Series 需要合并的对象
join {'inner','outer'} 联合或交集
keys 索引 使用传递的键作为最外层构建层次索引

merge

本方法主要用于合并不同Pandas数据,函数原型和常用参数为2

1
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False)
参数 类型 解释
left DataFrame 需要合并的对象
right DataFrame 需要合并的对象
how {left, right, outer, inner} 数据融合的方法
on label or list 连接的列名
left_on label or list, or array-like 左表对齐的列
right_on label or list, or array-like 右表对齐的列
left_index bool 将左侧的行索引用作其连接键
right_index bool 类上
sort bool 合并后是否排序,关闭后效率更高
suffixes list 列名重复时重命名的后缀

join

本方法主要用于合并不同Pandas数据(与merge类似),函数原型和常用参数为:

1
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
参数 类型 解释
other DataFrame 另一个DataFrame对象
lsuffix str 列名重复时重命名左表的后缀
rsuffix str 列名重复时重命名右表的后缀

append

本方法主要用于合并不同Pandas数据,是concat的简略形式,只能在axis=0上进行合并,函数原型为:

1
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
几种方法的差别
以上方法的区别在于:contact合并时直接在行/列方向拼接数据(并集);merge通过一个或者多个键将两张表在行/列方向合并在一起(语法类似SQL语言,交集);join根据索引进行列方向拼接(外联);append用于行方向拼接数据。

参考


  1. 很吵请安青争. pandas 表的合并 merge/join/contact. CSDN. [2019-01-09] ↩︎

  2. Yale曼陀罗. Pandas拼接操作(concat,merge,join和append)的区别. CSDN. [2019-05-22] ↩︎