如何在使用pd.Series .__ add__时填充空值

时间:2017-08-23 20:21:11

标签: python pandas

考虑两个系列s1s2

s1 = pd.Series([1, 2], name='A')
s2 = pd.Series([1], name='A')

当我添加它们时

s1 + s2

0    2.0
1    NaN
Name: A, dtype: float64

我为NaN索引1 相反,我可以做

s1.add(s2, fill_value=0)

0    2.0
1    2.0
Name: A, dtype: float64

但是,我无法使用add,我需要使用__add__。问题是pd.Series.__add__没有fill_value参数。

上下文
所以你理解为什么__add__对我很重要

我正在尝试做的是子类pd.Series,我想添加我的子类的两个成员加号+,默认情况下用{{1}填充缺失的值}}。为了使用0,我必须在我的子类中定义+。但我希望能够利用__add__并传递适当的参数和值。但正如我所说,pd.Series.__add__没有pd.Series.__add__参数。

相比之下,fill_value确实有pd.DataFrame.__add__

我尝试过什么
有一个fill_value参数,我怀疑我可以传递一些东西。但我不知道是什么。

na_op

这不是我想要的。为了清楚起见,我需要使用s1.__add__(s2, na_op=0) 0 2.0 1 NaN Name: A, dtype: float64 ,其中s1.__add__(s2, **kwargs)包含一个关键字参数,它会让我

kwargs

这是我放在一起的子类代码。希望它有助于突出我想要做的事情。

0    2.0
1    2.0
Name: A, dtype: float64

2 个答案:

答案 0 :(得分:2)

我不是100%确定我关注,但您是否只是想覆盖__add__方法?排除你需要做的other stuff以正确地继承pandas对象,大致:

class PiR2Series(pd.Series):

    def __init__(self, *args, **kwargs):
        super(PiR2Series, self).__init__(*args, **kwargs)


    def __add__(self, other):
        return self.add(other, fill_value=0)

然后你可以这样做:

s1 = PiR2Series([1, 2], name='A')
s2 = PiR2Series([1], name='A')

s1 + s2

0    2.0
1    2.0
Name: A, dtype: float64

免责声明:我没有真正做过很多pandas对象的子类化,所以我不能保证上面的内容是正确的。

答案 1 :(得分:-2)

要使用值填充NaN s,请使用df.fillna(<value>)