熊猫班级扩展不起作用

时间:2018-07-19 08:03:08

标签: python pandas class extension-methods

我正在寻找在pandas.DataFrame中添加一个属性函数。但是,使用它时,我不断收到错误AttributeError: 'DataFrame' object has no attribute 'sayHello'。 这就是我扩展课程的方式:

import pandas as pd

class pd(pd.DataFrame):

    @property
    def sayHello(self):
        print('hello')

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

我无法重现该错误,所以我猜想这是由于您如何调用sayHello方法所致。很有可能,您尝试调用sayHello的对象不是您创建的类。

import pandas as pd

class Your_pd_class(pd.DataFrame):

    @property
    def sayHello(self):
        print('hello')

x = Your_pd_class()
x.sayHello

上面的代码段将在输出中显示“ hello”。

请注意两件事:

  1. 首先,给自定义类一个与导入模块相同的名称是不好的做法,因为这会引起混淆,因此我将类pd的名称更改为your_pd_class。我建议您给它起一个您可以记住的名称,但不要使用同一程序中使用的另一个模块已经使用的名称。
  2. 在此示例中,变量x被创建为Your_pd_class,如果创建变量x = pd.DataFrame(),则x将属于dataframe类,并且会出现错误你得到了。您的代码可能就是这种情况。如果要使用扩展的pd类,则应将其创建为Your_pd_class而不是pd.DataFrame

我希望这会有所帮助。

编辑

“扩展” pd.DataFrame类的技巧是将所有pd.DataFrame引用到Your_pd_class

import pandas as pd

class Your_pd_class(pd.DataFrame):

    @property
    def sayHello(self):
        print('hello')

pd.DataFrame = Your_pd_class

x = pd.DataFrame()
x.sayHello