Pandas 基础 (5) —— 处理缺失数据及层次化索引

  1. 处理缺失数据

    pandas 使用浮点值 NaN (Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。

    In [168]: data = Series(['a','b',np.nan,'d'])
    
    In [169]: data
    Out[169]: 
    0      a
    1      b
    2    NaN
    3      d
    dtype: object
    
    In [170]: data.isnull()
    Out[170]: 
    0    False
    1    False
    2     True
    3    False
    dtype: bool
    

    Python 内置的 None 值也会被当做 NA 处理:

    In [171]: data[0] = None
    
    In [172]: data.isnull()
    Out[172]: 
    0     True
    1    False
    2     True
    3    False
    dtype: bool
    

NA处理方法

  1. 滤除缺失数据

    对于 Series,dropna 返回一个仅含非空数据和索引值的 Series:

    In [173]: data
    Out[173]: 
    0    None
    1       b
    2     NaN
    3       d
    dtype: object
    
    In [174]: data.dropna()
    Out[174]: 
    1    b
    3    d
    dtype: object
    # 也可以通过布尔型索引达到这个目的
    In [175]: data[data.notnull()]
    Out[175]: 
    1    b
    3    d
    dtype: object
    

    而对于 DataFrame 对象,稍微有点复杂,dropna 默认会丢弃任何含有缺失值的行:

    In [176]: data = DataFrame([[1,2,3],[1,np.nan,np.nan],
         ...: [np.nan,np.nan,np.nan],[np.nan,4,5]])
    
    In [177]: cleaned = data.dropna()
    
    In [178]: data
    Out[178]: 
         0    1    2
    0  1.0  2.0  3.0
    1  1.0  NaN  NaN
    2  NaN  NaN  NaN
    3  NaN  4.0  5.0
    
    In [179]: cleaned
    Out[179]: 
         0    1    2
    0  1.0  2.0  3.0
    
    # 传入 how='all' 将只丢弃全为 NA 的那些行
    In [181]: data.dropna(how='all')
    Out[181]: 
         0    1    2
    0  1.0  2.0  3.0
    1  1.0  NaN  NaN
    3  NaN  4.0  5.0
    

    要丢弃列,需要传入 axis=1,表示在列上生效:

    In [183]: data[4] = np.nan
    
    In [184]: data
    Out[184]: 
         0    1    2   4
    0  1.0  2.0  3.0 NaN
    1  1.0  NaN  NaN NaN
    2  NaN  NaN  NaN NaN
    3  NaN  4.0  5.0 NaN
    
    In [185]: data.dropna(axis=1,how='all')
    Out[185]: 
         0    1    2
    0  1.0  2.0  3.0
    1  1.0  NaN  NaN
    2  NaN  NaN  NaN
    3  NaN  4.0  5.0
    

  2. 填充缺失数据

    要填充缺失的数据,主要使用 fillna 方法,通过调用 fillna(Number) 就会将缺失值替换为 Number 数值。

    In [186]: df
    Out[186]: 
       one  two
    a  1.0  NaN
    b  2.0  3.0
    c  NaN  NaN
    d  0.0  2.0
    
    In [187]: df.fillna(100)
    Out[187]: 
         one    two
    a    1.0  100.0
    b    2.0    3.0
    c  100.0  100.0
    d    0.0    2.0
    # fillna 默认会返回新对象,但是传入 inplace=True 会对原有对象进行就地修改
    In [188]: df.fillna(200,inplace=True)
    
    In [189]: df
    Out[189]: 
         one    two
    a    1.0  200.0
    b    2.0    3.0
    c  200.0  200.0
    d    0.0    2.0
    

\fillna函数的参数说明

  1. 层次化索引

    P164​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值