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

9

给定一个 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])

但是我收到了错误信息

类型错误:参数“value”必须是标量或字典,但您传递了一个“列表”

有没有简单的方法来实现这个?


1
这是一个bug,https://github.com/pandas-dev/pandas/issues/3435,顺便问一下,你为什么需要这个? - BENY
4个回答

12

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

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

3

你可以转换成对象

ser=ser.astype('object')

然后将列表分配为np.nan
ser.loc[ser.isnull()]=[[np.nan]]

2

最终我使用了

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

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


0

fillna 可以接受一个Series,而列表可以转换为Series。将列表包装在 pd.Series() 中适用于我:

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

result
0    0.0
1    1.0
2    NaN
dtype: float64

1
问题明确要求在索引2处使用列表作为值。因此,应该使用[nan]而不是NaN。 - user__42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接