使用 fillna 用 Pandas 中的列表填充空值
Filling nulls with a list in Pandas using fillna
给定 pd.Series
,我想用列表替换空值。即,给定:
import numpy as np
import pandas as pd
ser = pd.Series([0,1,np.nan])
我想要一个 return
的函数
0 0
1 1
2 [nan]
但是如果我尝试为此使用自然函数,即 fillna
:
result = ser.fillna([np.nan])
但我收到错误
TypeError: "value" parameter must be a scalar or dict, but you passed a "list"
关于实现此目的的简单方法有什么建议吗?
使用 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]]
fillna可以取一个Series,一个list可以转成一个Series。将您的列表包装在 pd.Series()
中对我有用:
result = ser.fillna(pd.Series([np.nan]))
result
0 0.0
1 1.0
2 NaN
dtype: float64
我最终使用了
ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan])
因为 pd.isnull(x) 会给我模棱两可的真值错误(我的系列中也有其他列表)。这是 YOBEN_S' 和 jezrael 的回答的组合。
给定 pd.Series
,我想用列表替换空值。即,给定:
import numpy as np
import pandas as pd
ser = pd.Series([0,1,np.nan])
我想要一个 return
的函数0 0
1 1
2 [nan]
但是如果我尝试为此使用自然函数,即 fillna
:
result = ser.fillna([np.nan])
但我收到错误
TypeError: "value" parameter must be a scalar or dict, but you passed a "list"
关于实现此目的的简单方法有什么建议吗?
使用 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]]
fillna可以取一个Series,一个list可以转成一个Series。将您的列表包装在 pd.Series()
中对我有用:
result = ser.fillna(pd.Series([np.nan]))
result
0 0.0
1 1.0
2 NaN
dtype: float64
我最终使用了
ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan])
因为 pd.isnull(x) 会给我模棱两可的真值错误(我的系列中也有其他列表)。这是 YOBEN_S' 和 jezrael 的回答的组合。