代码之家  ›  专栏  ›  技术社区  ›  splinter

使用fillna在Pandas中用列表填充空值

  •  7
  • splinter  · 技术社区  · 8 年前

    给定 pd.Series ,我想用列表替换null值。也就是说,假设:

    import numpy as np
    import pandas as pd
    ser = pd.Series([0,1,np.nan])
    

    我想要一个可以返回的函数

    0        0
    1        1
    2    [nan]
    

    但是如果我试着用自然函数,也就是 fillna :

    result = ser.fillna([np.nan])
    

    但我得到了错误

    TypeError:“value”参数必须是标量或dict,但您传递了一个“list”

    有什么简单的方法来实现这一点的建议吗?

    4 回复  |  直到 8 年前
        1
  •  10
  •   jezrael    8 年前

    使用 apply 因为 fillna 仅使用标量:

    print (ser.apply(lambda x: [np.nan] if pd.isnull(x) else x))
    0        0
    1        1
    2    [nan]
    dtype: object
    
        2
  •  3
  •   BENY    8 年前

    您可以更改为对象

    ser=ser.astype('object')
    

    np.nan

    ser.loc[ser.isnull()]=[[np.nan]]
    
        3
  •  1
  •   user__42    6 年前

    我最终使用了

    ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan]) 
    

    因为pd。isnull(x)会给我模糊的真值错误(我的系列中也有其他列表)。这是尤本斯和耶兹雷尔答案的结合。

        4
  •  0
  •   aaronpenne    8 年前

    fillna 可以取一个系列,列表可以转换为一个系列。将列表包装在 pd.Series() 为我工作:

    result = ser.fillna(pd.Series([np.nan]))
    
    result
    0    0.0
    1    1.0
    2    NaN
    dtype: float64