【python数据分析】利用pandas处理缺失数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN_fzs/article/details/82115403

一、缺失数据

pandas中使用浮点值NaN(Not a Number)来表示浮点或非浮点数组中的缺失数据。

pandas as pd
import numpy as np
from pandas import Series,DataFrame

data = Series(['a','b',np.NAN,'d'])
data
#输出:
0      a
1      b
2    NaN
3      d
dtype: object


data.isnull()
#输出
0    False
1    False
2     True
3    False
dtype: bool

data.notnull()
#输出
0     True
1     True
2    False
3     True
dtype: bool

python中None值也会被当作缺失值,做NA处理

data[0] = None
data
#输出
0    None
1       b
2     NaN
3       d
dtype: object

二、过滤缺失值

对于一个Series,可以利用dropna()返回非空数据和索引值的Series

from numpy import nan as NA
data = Series([1,NA,5,NA,9])
data.dropna()
#输出:
0    1.0
2    5.0
4    9.0
dtype: float64

#也可以布尔索引方法:
data[data.notnull()]
#输出
0    1.0
2    5.0
4    9.0
dtype: float64

对于DataFrame对象来说,dropna默认丢弃任何含有缺失值的行

data = DataFrame([[1,2,3],[4,NA,NA],
                [NA,NA,NA],[NA,11,12]])
data
#输出
     0     1     2
0  1.0   2.0   3.0
1  4.0   NaN   NaN
2  NaN   NaN   NaN
3  NaN  11.0  12.0

data.dropna()
#输出
     0    1    2
0  1.0  2.0  3.0

利用how='all'过滤掉全为NA的行

data.dropna(how='all')
#输出
     0     1     2
0  1.0   2.0   3.0
1  4.0   NaN   NaN
3  NaN  11.0  12.0

用这种方式,再加上一个axis=1即可过滤掉全为NA的列

data[4]=NA
data
#输出
     0     1     2   4
0  1.0   2.0   3.0 NaN
1  4.0   NaN   NaN NaN
2  NaN   NaN   NaN NaN
3  NaN  11.0  12.0 NaN

data.dropna(axis=1,how='all')
#输出
     0     1     2
0  1.0   2.0   3.0
1  4.0   NaN   NaN
2  NaN   NaN   NaN
3  NaN  11.0  12.0

还可以通过thresh参数实现过滤,留下一部分观测数据,thresh为非NaN值的最少个数

df = DataFrame(np.random.randn(7,3))
df.ix[1:3,0] = NA;df.ix[1:2,2] = NA
df
#输出
          0         1         2
0 -1.313231 -1.241962 -1.885440
1       NaN -0.153630       NaN
2       NaN -0.678547       NaN
3       NaN  0.875522 -1.614373
4  0.188576 -2.019324  0.718871
5 -0.468703  0.312403 -1.711713
6 -0.622145  0.450063 -0.309250

df.dropna(thresh=3
#输出
          0         1         2
0  0.266983  0.519448 -1.162884
4 -0.973283  0.087619  0.992987
5  0.931693  0.766414 -1.183372
6  0.338726  0.738586  0.326401

三、填充数据

在大多数情况下,使用fillna方法来填充缺失数据

df.fillna(0)      #填充全为0的数据
#输出
          0         1         2
0  0.217111 -0.220653 -0.326984
1  0.000000 -0.120254  0.000000
2  0.000000 -0.695810  0.000000
3  0.000000  0.162947  0.054661
4  0.346839  0.403216 -0.059382
5 -0.389539 -1.013111  1.296135
6  0.746627  0.110324 -0.278191

也可以用过字典调用fillna,对不同列填充不同的值

df.fillna({0:0,2:1})
#输出
          0         1         2
0  0.217111 -0.220653 -0.326984
1  0.000000 -0.120254  1.000000
2  0.000000 -0.695810  1.000000
3  0.000000  0.162947  0.054661
4  0.346839  0.403216 -0.059382
5 -0.389539 -1.013111  1.296135
6  0.746627  0.110324 -0.278191

还可以使用method参数填充:’ffill’或’pad 值前向填充,’bfill’或’backfill 后向填充

df.fillna(method = 'ffill')
#输出 
          0         1         2
0  0.217111 -0.220653 -0.326984
1  0.217111 -0.120254 -0.326984
2  0.217111 -0.695810 -0.326984
3  0.217111  0.162947  0.054661
4  0.346839  0.403216 -0.059382
5 -0.389539 -1.013111  1.296135
6  0.746627  0.110324 -0.278191

df.fillna(method = 'bfill')
#输出
          0         1         2
0  0.217111 -0.220653 -0.326984
1  0.346839 -0.120254  0.054661
2  0.346839 -0.695810  0.054661
3  0.346839  0.162947  0.054661
4  0.346839  0.403216 -0.059382
5 -0.389539 -1.013111  1.296135
6  0.746627  0.110324 -0.278191

fillna可以实现很多功能,比如用平均值填充

扫描二维码关注公众号,回复: 2930995 查看本文章
data = Series([1,NA,3,NA,7])
data.fillna(data.mean())
#输出
0    1.000000
1    3.666667
2    3.000000
3    3.666667
4    7.000000
dtype: float64

python数据分析数据分析

大数据 pandas

猜你喜欢

转载自blog.csdn.net/CSDN_fzs/article/details/82115403