在数据处理的过程中,很多数据集存在数据缺失、错误、异常等情况,这些数据被称为脏数据,数据清洗的过程就是处理这些脏数据的过程。如无特殊说明,本章所使用数据为 尿检结果.xls:
异常处理
缺失数据处理
- isnull/isna
Pandas 的isnull
方法等于isna
方法(推荐用isna
),是用来判断缺失值的,如果返回True
则该单元格为空,返回False
则该单元格非空。
1
2
|
data['血红蛋白'].isna() # 找出该列所有缺失值
data[data['血红蛋白'].isna()] # 取出缺失值所在行
|
- notnull/notna
Pandas 的notnull
方法等于notna
方法(推荐用notna
),是用来判断非缺失值的,如果返回True
则该单元格为非空,返回False
则该单元格空。
1
2
|
data['血红蛋白'].notna() # 找出该列所有非缺失值
data[data['血红蛋白'].notna()] # 取出非缺失值所在行
|
- dropna
本方法主要用于删除缺失值所在的行/列,函数原型和主要参数为:
1
|
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
|
参数 |
解释 |
how |
any 代表删除所有存在缺失值的行/列,all 表示删除全部为缺失值的行/列 |
thresh |
某行/列的非空值超过thresh 时不删除 |
subset |
允许我们drop 的行/列索引 |
- fillna
本方法主要用于填充缺失值所在的行/列,函数原型和主要参数为:
1
|
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
|
参数 |
解释 |
value |
用于填充空单元格的值 |
method |
用缺失值后面(bfill )或前面(fill )的值填充 |
limit |
最大填充次数 |
重复数据处理
- duplicated
本方法主要用于查找重复值所在的行/列,将重复的数据设置为True
,其函数原型和主要参数为:
1
|
DataFrame.duplicated(subset=None, keep='first')
|
参数 |
解释 |
subset |
检查的列索引,默认检查所有 |
keep |
第一次/最后一个重复值不设置为True ;所有重复值设为True |
- drop_duplicated
本方法主要用于删除重复值所在的行/列,函数原型为函数原型和主要参数为:
1
|
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
|
参数 |
解释 |
subset |
同上 |
keep |
同上 |
inplace |
是否在原数据上修改 |
数据合并
本方法主要用于合并不同Pandas数据,函数原型和常用参数为:
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数据,函数原型和常用参数为:
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
用于行方向拼接数据。
参考