pandas DataFrame添加fill_value NotImplementedError

时间:2016-06-17 18:09:13

标签: python pandas

我有:

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

4 个答案:

答案 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