因此,出于某种原因,我想像这样子类一个pandas.Series:
class _Subseries(pd.Series):
_metadata = ['custom_method']
@property
def _constructor(self):
return _Subseries
@property
def _constructor_expanddim(self):
return _Subseries
def custom_method(self, value):
return self.values + value我创建一个实例,将其切片,并检查类型是否不变:
s = _Subseries(range(5))
s = s[-3:]
print(s.values, type(s[-2:]))2 3 4<类'main._Subseries'>
到目前一切尚好。该系列似乎切片,它应该和类型保持不变。
现在,如果我想对这个对象应用某种方法,它将不会将其应用于切片版本,而是应用于原始版本:
s.custom_method(1)数组(1,2,3,4,5,dtype=int64)
问题:
额外信息:
发布于 2020-12-05 17:05:02
解决方案:
只需要在_metadata中定义属性才能在切片之后访问。从custom_method中删除_metadata将在执行s.custom_method(1)时返回预期的结果
数组(3,4,5,dtype=int64)
解释:
_metadata中定义的属性是从原始实例中复制的,在这种情况下,s_sliced.custom_method = s.custom_method会导致在发布的问题中观察到的不同形状。
https://stackoverflow.com/questions/65155561
复制相似问题