用Python进行数据清洗,这7种方法你一定要掌握

数据清洗是数据分析的必备环节,在进行分析过程中,会有很多不符合分析要求的数据,例如重复、错误、缺失、异常类数据。
 
01 重复值处理
 
数据录入过程、数据整合过程都可能会产生重复数据,直接删除是重复数据处理的主要方法。pandas提供查看、处理重复数据的方法duplicated和drop_duplicates。以如下数据为例:
 
>sample = pd.DataFrame({‘id’:[1,1,1,3,4,5],
 
                       ‘name’:[‘Bob’,’Bob’,’Mark’,’Miki’,’Sully’,’Rose’],
 
                       ‘score’:[99,99,87,77,77,np.nan],
 
                       ‘group’:[1,1,1,2,1,2],})
 
>sample
 
group  id   name  score
 
0      1   1    Bob   99.0
 
1      1   1    Bob   99.0
 
2      1   1   Mark   87.0
 
3      2   3   Miki   77.0
 
4      1   4  Sully   77.0
 
5      2   5   Rose    NaN
 
发现重复数据通过duplicated方法完成,如下所示,可以通过该方法查看重复的数据。
 
>sample[sample.duplicated()]
 
group  id   name  score
 
1      1   1    Bob   99.0
 
需要去重时,可drop_duplicates方法完成:
 
>sample.drop_duplicates()
 
group  id   name  score
 
0      1   1    Bob   99.0
 
2      1   1   Mark   87.0
 
3      2   3   Miki   77.0
 
4      1   4  Sully   77.0
 
5      2   5   Rose    NaN
 
drop_duplicates方法还可以按照某列去重,例如去除id列重复的所有记录:
 
>sample.drop_duplicates(‘id’)
 
group  id   name  score
 
0      1   1    Bob   99.0
 
3      2   3   Miki   77.0
 
4      1   4  Sully   77.0
 
5      2   5   Rose    NaN
 
02 缺失值处理
 
缺失值是数据清洗中比较常见的问题,缺失值一般由NA表示,在处理缺失值时要遵循一定的原则。
 
首先,需要根据业务理解处理缺失值,弄清楚缺失值产生的原因是故意缺失还是随机缺失,再通过一些业务经验进行填补。一般来说当缺失值少于20%时,连续变量可以使用均值或中位数填补;分类变量不需要填补,单算一类即可,或者也可以用众数填补分类变量。
 
当缺失值处于20%-80%之间时,填补方法同上。另外每个有缺失值的变量可以生成一个指示哑变量,参与后续的建模。当缺失值多于80%时,每个有缺失值的变量生成一个指示哑变量,参与后续的建模,不使用原始变量。
 
在下图中展示了中位数填补缺失值和缺失值指示变量的生成过程。
 
Pandas提供了fillna方法用于替换缺失值数据,其功能类似于之前的replace方法,例如对于如下数据:
 
> sample
 
    group  id   name  score
 
0    1.0  1.0    Bob   99.0
 
1    1.0  1.0    Bob    NaN
 
2    NaN  1.0   Mark   87.0
 
3    2.0  3.0   Miki   77.0
 
4    1.0  4.0  Sully   77.0
 
5    NaN  NaN    NaN    NaN
 
分步骤进行缺失值的查看和填补如下:
 
1. 查看缺失情况
 
在进行数据分析前,一般需要了解数据的缺失情况,在Python中可以构造一个lambda函数来查看缺失值,该lambda函数中,sum(col.isnull())表示当前列有多少缺失,col.size表示当前列总共多少行数据:
 
>sample.apply(lambda col:sum(col.isnull())/col.size)
 
group    0.333333
 
id       0.166667
 
name     0.166667
 
score    0.333333
 
dtype: float64
 
2. 以指定值填补
 
pandas数据框提供了fillna方法完成对缺失值的填补,例如对sample表的列score填补缺失值,填补方法为均值:
 
>sample.score.fillna(sample.score.mean())
 
0    99.0
 
1    85.0
 
2    87.0
 
3    77.0
 
4    77.0
 
5    85.0
 
Name: score, dtype: float64
 
当然还可以以分位数等方法进行填补:
 
>sample.score.fillna(sample.score.median())
 
0    99.0
 
1    82.0
 
2    87.0
 
3    77.0
 
4    77.0
 
5    82.0
 
Name: score, dtype: float64
 
3. 缺失值指示变量
 
pandas数据框对象可以直接调用方法isnull产生缺失值指示变量,例如产生score变量的缺失值指示变量:
 
>sample.score.isnull()
 
0    False
 
1     True
 
2    False
 
3    False
 
4    False
 
5     True
 
Name: score, dtype: bool
 
若想转换为数值0,1型指示变量,可以使用apply方法,int表示将该列替换为int类型。
 
>sample.score.isnull().apply(int)
 
0    0
 
1    1
 
2    0
 
3    0
 
4    0
 
5    1
 
Name: score, dtype: int64

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h63973.shtml

张贴在3