繁体   English   中英

创建一个pandas.DataFrame包装器,它有一个返回数据帧的方法

[英]Creating a pandas.DataFrame wrapper that has a method to return a dataframe

我正在尝试创建一个包含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退出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的方法。

知道代码可能有什么问题,或者有没有办法让这个更好?

您不能将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()

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM