使用 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()

pandas使用fillna函数对dataframe中不同的数据列使用不同的方式内容进行填充

Fillna 一次使用多种方法 - pandas

如何在 pandas fillna() 方法中为不同的列应用不同的方法参数

pandas使用fillna函数将dataframe中缺失值替换为空字符串(replace missing value with blank string in dataframe)

在 Pandas 中具有向后和向前看状态的 Fillna