前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据处理从零开始----第三章(pandas)②处理缺失数据

Python数据处理从零开始----第三章(pandas)②处理缺失数据

作者头像
用户1359560
发布2018-12-14 15:13:23
1.1K0
发布2018-12-14 15:13:23
举报
文章被收录于专栏:生信小驿站生信小驿站

在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

缺失值的判断

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

代码语言:javascript
复制
 s = Series(["a","b",np.nan,"c",None])
 print(s)
    '''
    0       a
    1       b
    2     NaN
    3       c
    4    None
    '''
    #判断缺失值,如果是则返回True,否则返回False
    print(s.isnull())
    '''
    0    False
    1    False
    2     True
    3    False
    4     True
    '''
    #输出缺失值的索引和值
    print(s[s.isnull()])
    '''
    2     NaN
    4    None
    '''

pandas在运算中会自动忽略缺失值。

代码语言:javascript
复制
a  = pd.Series([1,2,np.nan,3,None])
a.sum()
6

此外pandas一共提供了4个针对缺失数据进行操作的函数,分别是isnull(),notnull(),dropna(),fillna()。

代码语言:javascript
复制
a.isnull()
Out[9]: 
0    False
1    False
2     True
3    False
4     True
dtype: bool

a.notnull()
Out[10]: 
0     True
1     True
2    False
3     True
4    False
dtype: bool

a.dropna()
Out[11]: 
0    1.0
1    2.0
3    3.0
dtype: float64

DataFrame的缺失值过滤

DataFrame删除缺失值相对于Series而言就要复杂一些,也许有的时候你是想删除含有缺失值的行或列,也许有时候你需要删除的是,当整行或整列全为缺失值的时候才删除,好在pandas对于这两种情况都有相对应的处理方法。

1、删除含有缺失值的行和列

df.dropna( axis=0, # 0: 对行进行操作; 1: 对列进行操作 how='any' # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop )

代码语言:javascript
复制
a = [[1, np.nan, 2],[9,None,np.nan],[3, 4, None],[5,6,7]]
data = pd.DataFrame(a)
data


Out[19]: 
   0    1    2
0  1  NaN  2.0
1  9  NaN  NaN
2  3  4.0  NaN
3  5  6.0  7.0





data.dropna()
Out[20]: 
   0    1    2
3  5  6.0  7.0

data.dropna(axis=1)
Out[21]: 
   0
0  1
1  9
2  3
3  5

2、删除全为缺失值的行和列

代码语言:javascript
复制
a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
data = pd.DataFrame(a)
print(data)


     0   1    2
0  1.0 NaN  2.0
1  NaN NaN  NaN
2  3.0 NaN  NaN
3  5.0 NaN  7.0

print(data.dropna(how="all"))
     0   1    2
0  1.0 NaN  2.0
2  3.0 NaN  NaN
3  5.0 NaN  7.0



print(data.dropna(how="all",axis=1))
     0    2
0  1.0  2.0
1  NaN  NaN
2  3.0  NaN
3  5.0  7.0

3.使用thresh控制删除的行数

代码语言:javascript
复制
a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
data = pd.DataFrame(a)
data
Out[35]: 
     0   1    2
0  1.0 NaN  2.0
1  NaN NaN  NaN
2  3.0 NaN  NaN
3  5.0 NaN  7.0

data.dropna(how="all",thresh=3)
Out[36]: 
Empty DataFrame
Columns: [0, 1, 2]
Index: []

data.dropna(how="all",thresh=1)
Out[37]: 
     0   1    2
0  1.0 NaN  2.0
2  3.0 NaN  NaN
3  5.0 NaN  7.0

df.fillna(value=0)

填充缺失值

数据都是宝贵的,也许有时候你的数据不够多,因为数据越多对于模型的训练,数据分析都是有好处的,所以很多的时候我们都不想删除数据。通常情况下,也许你会选择用一些特殊值来填充缺失值。下面介绍使用pandas的fillna方法来填充缺失数据。

1、指定特殊值填充缺失值

代码语言:javascript
复制
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
    data = DataFrame(a)
    print(data)
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  NaN  6.0
    2  3  7.0  NaN
    3  5  NaN  7.0
    '''
    #用0填充所有的缺失数据
    print(data.fillna(0))
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  0.0  6.0
    2  3  7.0  0.0
    3  5  0.0  7.0
    '''

2、不同列使用不同的填充值

代码语言:javascript
复制
 a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
    data = DataFrame(a)
    print(data)
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  NaN  6.0
    2  3  7.0  NaN
    3  5  NaN  7.0
    '''
    print(data.fillna({1:1,2:2}))
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  1.0  6.0
    2  3  7.0  2.0
    3  5  1.0  7.0
    '''

3、前向填充和后向填充

代码语言:javascript
复制
 a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
    data = DataFrame(a)
    print(data)
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  NaN  6.0
    2  3  7.0  NaN
    3  5  NaN  7.0
    '''
    #前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充
    print(data.fillna(method="ffill"))
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  2.0  6.0
    2  3  7.0  6.0
    3  5  7.0  7.0
    '''
    #后向填充,使用下一行的值,不存在的时候就不填充
    print(data.fillna(method="bfill"))
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  7.0  6.0
    2  3  7.0  7.0
    3  5  NaN  7.0
    '''

4、使用列的平均值进行填充

代码语言:javascript
复制
 a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
 data = DataFrame(a)
 print(data)
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  NaN  6.0
    2  3  7.0  NaN
    3  5  NaN  7.0
    '''
print(data.fillna(data.mean()))
    '''
       0    1    2
    0  1  2.0  2.0
    1  3  4.5  6.0
    2  3  7.0  5.0
    3  5  4.5  7.0
    '''
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 缺失值的判断
  • DataFrame的缺失值过滤
  • 填充缺失值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档