【问题标题】:Creating a pandas.DataFrame wrapper that has a method to return a dataframe创建具有返回数据框的方法的 pandas.DataFrame 包装器
【发布时间】:2016-07-19 16:43:29
【问题描述】:

我正在尝试创建一个封装pandas.DataFrame 对象的类。在我为这个类编写了自己的方法之后,我希望 pandas 的方法也可用,但是以一种明确告诉我/用户它们来自 pandas 的方式。它会像这样工作

df = pd.DataFrame(np.random.randn(5,2))
md = myData(df)

a = md.df # returns the original pandas.DataFrame "df" to a (equivalent of a=df
print(md) # prints as myData class
print(md.df) # prints just as print(df) would. Equiv to print(df)

md.mean() # mean as defined in myData class. Returns myData object
md.df.mean() # mean as defined in pandas. Returns dataframe object

md.std() # myData std
md.df.std() # pandas std

到目前为止,我所能做的只是不成功的尝试。我真正认为应该但不应该做的一件事是

import pandas as _pd
class myData(_pd.DataFrame):
    """
    Attempt to create a myData object
    """
    def __init__(self, df, dic):
        df = df.copy()
        print(type(df))
        self.df = df
        self = df

它以RuntimeError: maximum recursion depth exceeded while calling a Python object 退出。

编辑

以下代码以同样的错误结束。

import pandas as _pd
class myData(_pd.DataFrame):
    """
    Attempt to create a myData object
    """
    def __init__(self, df, dic):
        df = df.copy()
        self.dic = dic
        super(myData, self).__init__(df)
        self.df = df

但是,如果我尝试

    def __init__(self, df, dic):
        df = df.copy()
        super(myData, self).__init__(df)

然后它工作了,但结果是一个 myData 对象,它实际上是一个 DataFrame,因为每个方法都已经是 DataFrames 的。

知道代码可能有什么问题,或者是否有办法让它变得更好?

【问题讨论】:

  • 您可以使用super() 访问父类的属性和方法,如this question 中所述。
  • @albert 感谢您的提示。请看我的编辑

标签: python class pandas dataframe


【解决方案1】:

您不能使用DataFrame 作为父级:

class myData(object):
    """
    Attempt to create a myData object
    """
    def __init__(self, df):
        self.df = df.copy()

df = pd.DataFrame(np.random.randn(100, 5), columns=list('ABCDE'))
mdf = myData(df)
mdf.df.describe()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2018-01-24
    • 1970-01-01
    • 2020-11-04
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多