您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – pandas对象的子类与其他对象的子类不同?

5b51 2022/1/14 8:21:27 python 字数 3868 阅读 474 来源 www.jb51.cc/python

我正在尝试创建一个Pandas数据结构的子类,在我的代码中替换一个带有Seri??es的子类的dict的子类,我不明白为什么这个示例代码不起作用from pandas import Series class Support(Series): def supportMethod1(self): print 'I am supp

概述

我正在尝试创建一个Pandas数据结构的子类,在我的代码中替换一个带有Seri??es的子类的dict的子类,我不明白为什么这个示例代码不起作用

from pandas import Series    

class Support(Series):
    def supportMethod1(self):
        print 'I am support method 1'       
    def supportMethod2(self):
        print 'I am support method 2'

class Compute(object):
    supp=None        
    def test(self):
        self.supp()  

class Config(object):
    supp=None        
    @classmethod
    def initializeConfig(cls):
        cls.supp=Support()
    @classmethod
    def setConfig1(cls):
        Compute.supp=cls.supp.supportMethod1
    @classmethod
    def setConfig2(cls):
        Compute.supp=cls.supp.supportMethod2            

Config.initializeConfig()

Config.setConfig1()    
c1=Compute()
c1.test()

Config.setConfig2()    
c1.test()

可能它不是更改某些对象配置的最佳方法,无论如何我发现这在我的代码中很有用,最重要的是我想了解为什么用dict而不是系列它按预期工作.

非常感谢!

Pandas 0.13中的内部重构极大地简化了子类化. Pandas系列现在可以像任何其他Python对象一样进行子类化:

class MySeries(pd.Series):
    def my_method(self):
        return "my_method"

遗产答案(熊猫< = 0.12) 问题是Series使用__new__来确保实例化Series对象. 您可以像这样修改您的类:

class Support(pd.Series):
    def __new__(cls,*args,**kwargs):
        arr = Series.__new__(cls,**kwargs)
        return arr.view(Support)

    def supportMethod1(self):
        print 'I am support method 1'       
    def supportMethod2(self):
        print 'I am support method 2'

但是,最好做一个has-a而不是is-a.或者猴子补丁系列对象.原因是由于数据存储的性质,您在使用pandas时经常会丢失子类.简单的事情

s.ix[:5] 
s.cumsum()

将返回Series对象而不是您的子类.在内部,数据存储在连续的阵列中,并针对速度进行了优化.数据仅在需要时用类封装,并且这些类是硬编码的.另外,如果像s.ix [:5]这样的东西应该返回相同的子类,那么这并不是很明显.这取决于子类的语义以及附加到它的元数据.

http://nbviewer.ipython.org/3366583/subclassing%20pandas%20objects.ipynb有一些笔记.


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶