给定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"参数必须是标量或字典,但您传递了一个"列表"
有什么建议可以通过简单的方法来实现这一目标吗?
答案 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的答案的组合。