我有:
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:不支持fill_value 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
答案 0 :(得分: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
答案 1 :(得分:1)
我和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
答案 2 :(得分:1)
只需在.fillna(0)
上使用df
:
df.fillna(0).add(s)
答案 3 :(得分:1)
我也遇到了这个问题。就我而言,这是因为我要向数据框添加一个序列。
将序列添加到序列中或将数据帧添加到数据帧时,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