【问题标题】:Filling nulls with a list in Pandas using fillna使用 fillna 在 Pandas 中使用列表填充空值
【发布时间】:2018-04-26 07:33:40
【问题描述】:

给定一个pd.Series,我想用一个列表替换空值。也就是说,给定:

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" 参数必须是标量或字典,但你传递的是 "list"

有什么简单的方法可以实现这一点吗?

【问题讨论】:

标签: python-3.x pandas series missing-data fillna


【解决方案1】:

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

print (ser.apply(lambda x: [np.nan] if pd.isnull(x) else x))
0        0
1        1
2    [nan]
dtype: object

【讨论】:

    【解决方案2】:

    你可以换成对象

    ser=ser.astype('object')
    

    然后分配列表np.nan

    ser.loc[ser.isnull()]=[[np.nan]]
    

    【讨论】:

      【解决方案3】:

      我最终使用了

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

      因为 pd.isnull(x) 会给我模棱两可的真值错误(我的系列中也有其他列表)。这是 YOBEN_S' 和 jezrael 的答案的组合。

      【讨论】:

        【解决方案4】:

        fillna 可以带一个Series,列表可以转换成一个Series。用pd.Series() 包装你的列表对我有用:

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

        【讨论】:

        • 该问题明确要求将列表作为索引 2 处的值。所以应该是 [nan] 而不是 NaN。
        猜你喜欢
        • 1970-01-01
        • 2020-04-16
        • 2016-03-05
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        相关资源
        最近更新 更多