首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切片子类熊猫系列在应用自定义方法时返回全部数据

切片子类熊猫系列在应用自定义方法时返回全部数据
EN

Stack Overflow用户
提问于 2020-12-05 09:36:29
回答 1查看 46关注 0票数 0

因此,出于某种原因,我想像这样子类一个pandas.Series:

代码语言:javascript
复制
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

我创建一个实例,将其切片,并检查类型是否不变:

代码语言:javascript
复制
s = _Subseries(range(5))
s = s[-3:]
print(s.values, type(s[-2:]))

2 3 4<类'main._Subseries'>

到目前一切尚好。该系列似乎切片,它应该和类型保持不变。

现在,如果我想对这个对象应用某种方法,它将不会将其应用于切片版本,而是应用于原始版本:

代码语言:javascript
复制
s.custom_method(1)

数组(1,2,3,4,5,dtype=int64)

问题:

  • 是正常行为吗?如果不是,那么如何在不更改类型的情况下,对pandas.Series进行子类化、切片、应用方法并使其返回该方法在切片数据上的结果(而不是原始数据)?

额外信息:

  • 大熊猫1.1.3
  • python 3.7.9
EN

回答 1

Stack Overflow用户

发布于 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会导致在发布的问题中观察到的不同形状。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65155561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档