考虑两个系列s1
和s2
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
答案 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>)
。