当前位置: 首页 > 面试题库 >

熊猫对象的子类与其他对象的子类有不同的工作方式吗?

邓焱
2023-03-14
问题内容

我正在尝试创建Pandas数据结构的子类,以在我的代码中将a的子类替换为a dict 的子类 Series
,我不明白为什么此示例代码不起作用

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中的内部重构大大简化了子类。Series现在可以像其他任何Python对象一样将Pandas子类化:

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, *args, **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。或猴子修补Series对象。原因是由于使用熊猫的数据存储特性,您经常会丢失其子类。像这样简单

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

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

http://nbviewer.ipython.org/3366583/subclassing%20pandas%20objects.ipynb有一些注释。



 类似资料:
  • 问题内容: Java中的以下代码在elipse上运行时,即使我们将其替换,也会提供相同的输出 与, 请注意,我们已经覆盖了方法。 输出为: 码: 请指出,用这两种方式创建子类对象有什么区别。并且访问方法和变量是否有任何区别?(我们的Java老师说,两种情况下访问方法和变量都不同) 同样,静态方法(例如main)会发生什么。艰难的我知道它是可继承的,但是有人可以在子类中突出它的行为吗? 问题答案:

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 我正在做一个绘图项目,我有一些工具(例如画笔、橡皮擦等),它们都是自己的类,每个都继承自一个抽象工具类,具有一些基本属性和抽象/非抽象方法。我看到的主要问题是,当我需要更改这些工具的颜色时,我想找出一种方法来为所有工具更改颜色,但也允许某些工具(如橡皮擦)保持不变,因为它的颜色应该始终只是背景色。 我正在从其他地方接收onColorChange(int newColor)方法调用,但这是触发工具颜

  • 问题内容: 我得到的错误就在这行 。 该怎么办?其他逻辑还可以吗? 我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即在和在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。 和我的listAll是对象类型? 我该怎么做?谢谢。 问题答案: 您可以添加一个通用基类并在那里进行比较,如下所示:

  • 问题内容: 嗨,我想知道我的问题是否有简单的解决方案, 我有一个: 它们都实现一个方法- 调用时飞。我知道我可以使用此方法访问超类的通用方法和属性 很好-但是现在我想访问子类具有的方法。我可以通过将as 强制转换为: 在我的情况下,我不想这样做,因为这意味着我对的每个子类型都有3套上述代码。 似乎有点多余,是否有更好的方法? 问题答案: 实际上,从超类执行此操作不是一个好方法,因为每个子类的行为都

  • 既然这个对象(在标题中说明)可以调用子类中的重写方法,为什么它不能调用子类的其他方法?我需要尽可能详细的回答,比如内存组织,JVM中的内部逻辑等。 下面的代码会让你清楚地理解我的问题。

  • 问题内容: 对于一个抽象类,我想定义一个为子类返回“ this”的方法: 我希望能够执行以下操作: 可以说香蕉面包会抛出一个IllegalArgumentException消息“不是蛋糕!”。 问题答案: 编辑 要求子类以某种方式表现是没有问题的,这超出了静态类型可以检查的范围。我们一直在这样做-一页又一页的普通英语指定您如何编写子类。 提出的另一种具有协变返回类型的解决方案必须做同样的事情-用简

  • 问题内容: 我有一些这样的代码。 超级班 子类 所以问题是我可以将超类的对象转换为子类吗?这个问题对我来说是正确的吗? 但它给Class Cast异常。 问题答案: 您可以将子类转换为超级类,反之亦然。如果“车辆”是“超级类”,而“汽车”是子类,则所有“汽车”(子代)都是“汽车”(“超级”),但并非所有“车辆”都是“汽车”。