使用 fillna 在 Pandas 中使用列表填充空值
Posted
技术标签:
【中文标题】使用 fillna 在 Pandas 中使用列表填充空值【英文标题】:Filling nulls with a list in Pandas using fillna 【发布时间】:2018-04-26 07:33:40 【问题描述】:给定一个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" 参数必须是标量或字典,但你传递的是 "list"
有什么简单的方法可以实现这一点吗?
【问题讨论】:
这是错误,github.com/pandas-dev/pandas/issues/3435,顺便说一句,你为什么需要这个? 【参考方案1】:使用apply
,因为fillna
仅使用标量:
print (ser.apply(lambda x: [np.nan] if pd.isnull(x) else x))
0 0
1 1
2 [nan]
dtype: object
【讨论】:
【参考方案2】:你可以换成对象
ser=ser.astype('object')
然后分配列表np.nan
ser.loc[ser.isnull()]=[[np.nan]]
【讨论】:
【参考方案3】:我最终使用了
ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan])
因为 pd.isnull(x) 会给我模棱两可的真值错误(我的系列中也有其他列表)。这是 YOBEN_S' 和 jezrael 的答案的组合。
【讨论】:
【参考方案4】:fillna 可以带一个Series,列表可以转换成一个Series。用pd.Series()
包装你的列表对我有用:
result = ser.fillna(pd.Series([np.nan]))
result
0 0.0
1 1.0
2 NaN
dtype: float64
【讨论】:
该问题明确要求将列表作为索引 2 处的值。所以应该是 [nan] 而不是 NaN。以上是关于使用 fillna 在 Pandas 中使用列表填充空值的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用fillna函数对dataframe中不同的数据列使用不同的方式内容进行填充
如何在 pandas fillna() 方法中为不同的列应用不同的方法参数
pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe)