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参数为行进行默认填充