给定一个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])
但我收到错误
类型错误:"值"参数必须是标量或字典,但您传递了"列表">
关于实现这一目标的简单方法的任何建议?
使用apply
,因为fillna
只使用标量:
print (ser.apply(lambda x: [np.nan] if pd.isnull(x) else x))
0 0
1 1
2 [nan]
dtype: object
你可以更改为对象
ser=ser.astype('object')
然后将列表分配给np.nan
ser.loc[ser.isnull()]=[[np.nan]]
我最终使用
ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan])
因为 pd.isnull(x( 会给我模棱两可的真值错误(我的系列中还有其他列表(。这是YOBEN_S'和耶兹雷尔的回答的组合。
fillna可以采用系列,列表可以转换为系列。将您的列表包装在pd.Series()
对我有用:
result = ser.fillna(pd.Series([np.nan]))
result
0 0.0
1 1.0
2 NaN
dtype: float64