5.4处理缺失数据

1.缺失数据

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

2.滤除缺失数据

对于一个Series, dropna返回一个仅含非空数据和索引值的Series。当然,也可以通过布尔型索引达到这个目的。

from numpy import nan as NA
from pandas import Series
data = Series([1, NA, 3.5, NA, 7])
data.dropna() 
'''0    1.0
   2    3.5
   4    7.0'''

data[data.notnull()]

对于DataFrame对象,事情有点复杂。你可能希望丢弃全NA或含有NA的行或列。

dropna默认丢弃任何含有缺失值的行。

给dropna传入how=' all ',将只丢弃全为NA的那些行。

import pandas as pd
data = pd.DataFrame([[1, 6.5, 2], [1, NA, NA], [NA, NA, NA]])
data.dropna()
'''
     0    1    2
0  1.0  6.5  2.0'''

data.dropna(how='all')
'''
     0    1    2
0  1.0  6.5  2.0
1  1.0  NaN  NaN'''

要用dropna丢弃列,只需传入axis=1即可。

data[4] = NA
data
'''
     0    1    2   4
0  1.0  6.5  2.0 NaN
1  1.0  NaN  NaN NaN
2  NaN  NaN  NaN NaN'''

data.dropna(axis=1,how='all')
'''
     0    1    2
0  1.0  6.5  2.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN'''

3.填充缺失数据

若不想滤除缺失数据,而是希望通过其他方式填补那些“空洞”。

对于大多数情况而言,fillna方法是最主要的函数.通过一个常数调用fillna就会将缺失值替换为那个常数值。

df
'''
          0   1         2
0 -0.837610 NaN  1.092551
1 -1.753719 NaN -0.292386
2 -0.893664 NaN  1.288066'''

df.fillna(0)
'''
          0    1         2
0 -0.837610  0.0  1.092551
1 -1.753719  0.0 -0.292386
2 -0.893664  0.0  1.288066'''

若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值。

df[3] = NA
df
'''
          0   1         2   3
0 -0.837610 NaN  1.092551 NaN
1 -1.753719 NaN -0.292386 NaN
2 -0.893664 NaN  1.288066 NaN'''

df.fillna({1: 0.5, 3: -1})
'''
          0    1         2    3
0 -0.837610  0.5  1.092551 -1.0
1 -1.753719  0.5 -0.292386 -1.0
2 -0.893664  0.5  1.288066 -1.0'''

fillna默认会返回新对象,但也可以对现有对象进行就地修改。

对reindex有效的那些插值方法也可用于fillna。

df = df.fillna(0, inplace=True) //inplace修改调用者对象而不产生副本
df
'''
          0    1         2    3
0 -0.837610  0.0  1.092551  0.0
1 -1.753719  0.0 -0.292386  0.0
2 -0.893664  0.0  1.288066  0.0'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值