pandas DataFrame 添加 fill_value NotImplementedError

Posted

技术标签:

【中文标题】pandas DataFrame 添加 fill_value NotImplementedError【英文标题】:pandas DataFrame add fill_value NotImplementedError 【发布时间】:2016-10-19 15:49:27 【问题描述】:

我有:

import pandas as pd
import numpy as np

np.random.seed([3,1415])
df = pd.DataFrame(np.random.choice((1, 2, np.nan), (5, 5)))
s = pd.Series(range(5))

我想将s 添加到df 并跨行广播。通常我会:

df.add(s)

就这样吧。但是,我想用0 填充缺失值。所以我想我会:

df.add(s, fill_value=0)

但我得到了:

NotImplementedError:不支持填充值 0

问题:如何获得我预期的结果?

     0    1    2    3    4
0  1.0  1.0  2.0  3.0  4.0
1  2.0  3.0  2.0  4.0  4.0
2  1.0  1.0  3.0  4.0  4.0
3  1.0  1.0  2.0  4.0  6.0
4  1.0  3.0  4.0  3.0  5.0

【问题讨论】:

df.fillna(0.0) + s 不行吗? 似乎是一个值得报告的错误。 您报告了这个错误吗?我也有类似情况 【参考方案1】:

堆栈跟踪表明该参数从未实现:

.../pandas/core/frame.py in _combine_match_columns(self, other, func, level, fill_value)
   3470         if fill_value is not None:
   3471             raise NotImplementedError("fill_value %r not supported" %
-> 3472                                       fill_value)
   3473

我可以在添加之前填充缺失的值:

In [43]: df.fillna(0).add(s)
Out[43]:
   0  1  2  3  4
0  1  1  2  3  4
1  2  3  2  4  4
2  1  1  3  4  4
3  1  1  2  4  6
4  1  3  4  3  5

【讨论】:

.fillna 与重新索引之前发生的填充不同,而不是之后。【参考方案2】:

0 和其他数字出现同样的错误。你也可以使用df.fillna(0):

df.fillna(0).add(s)
print df
>>>
     0    1    2    3    4
0  1.0  1.0  2.0  3.0  4.0
1  2.0  3.0  2.0  4.0  4.0
2  1.0  1.0  3.0  4.0  4.0
3  1.0  1.0  2.0  4.0  6.0
4  1.0  3.0  4.0  3.0  5.0

【讨论】:

【参考方案3】:

只需在df 上使用.fillna(0)

df.fillna(0).add(s)

【讨论】:

【参考方案4】:

我也遇到了这个问题。就我而言,这是因为我在数据框中添加了一个系列。

fill_value=0 指令在将系列添加到系列或将数据框添加到数据框时适用于我。

我刚刚创建了一个以系列为唯一列的新数据框,现在我可以使用 fill_value=0 添加它们。

df1.add(df2, fill_value=0)                  # This works
series1.add(series2, fill_value=0)          # This works
df.add(series, fill_value=0)                # Throws error
df.add(pd.DataFrame(series), fill_value=0)  # Works again

【讨论】:

以上是关于pandas DataFrame 添加 fill_value NotImplementedError的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用fillna函数将dataframe中的缺失值按照列均值进行填充(fill missing values with the mean of the column)

pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)并使用fill_value参数为行进行默认填充

pandas 基本操作

pandas.DataFrame.resample

详解pandas获取Dataframe元素值的几种方法

fillvalue填充的位置是空白值吗