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

时间:2017-11-13 15:04:05

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

给定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"参数必须是标量或字典,但您传递了一个"列表"

有什么建议可以通过简单的方法来实现这一目标吗?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

您可以更改为对象

ser=ser.astype('object')

然后分配列表np.nan

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

答案 2 :(得分:1)

fillna可以使用系列,列表可以转换为系列。在pd.Series()中包含您的列表对我有用:

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

result
0    0.0
1    1.0
2    NaN
dtype: float64

答案 3 :(得分:0)

我最终使用了

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

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