使用pandas.read_csv()函数基于Pandas.DataFrame创建类进行初始化

时间:2018-11-29 17:37:15

标签: python pandas class oop dataframe

我的目标是创建一个行为与Pandas DataFrame相同的对象,但在其之上还具有一些我自己的方法。据我了解,一种方法是扩展类,我首先尝试这样做:

class CustomDF(pd.DataFrame):
    def  __init__(self, filename):
        self = pd.read_csv(filename)

但是尝试查看该对象时出现错误,提示:'CustomDF' object has no attribute '_data'

我的第二次迭代是不继承该对象,而是将其作为DataFrame导入到对象属性之一中,并使方法变通,如下所示:

class CustomDF():

    def  __init__(self, filename):
        self.df = pd.read_csv(filename)

    def custom_method_1(self,a,b,...):
        ...

    def custom_method_2(self,a,b,...):
        ...

这很好,除了对于所有自定义方法而言,我需要先访问self.df属性才能对其执行任何操作,但我希望我的自定义数据框只是self

有没有办法做到这一点?还是这种方法不理想?

4 个答案:

答案 0 :(得分:0)

第一个示例中的__init__方法被覆盖。

使用super,然后添加您的自定义代码

class CustomDF(pd.DataFrame):
    def __init__(self, *args, **kw):
        super(CustomDF, self).__init__(*args, **kw)
        # Your code here

    def custom_method_1(self,a,b,...):
        ...

答案 1 :(得分:0)

在这里我可能会使用装饰器模式。接受的this post答案将使您步入正轨。

我看到您的第一次迭代真的很酷,但是在我看来,您需要了解有关Pandas内部的很多知识,例如,这个1 2 4 5 属性需要以某种方式设置。

干杯。

答案 2 :(得分:0)

这是您要找的吗?

class CustomDF:

    def  __init__(self):
        self.df = pd.read_csv(filename)

    def custom_method_1(self, *args, **kwargs):
        result_1 = do_custom_operations_on(self.df, *args, **kwargs)
        return result_1

    def custom_method_2(self, *args, **kwargs):
        result_2 = do_custom_operations_on(self.df, *args, **kwargs)
        return result_2

    ...

答案 3 :(得分:0)

在我的项目中,我做了类似的事情并使用了装饰器,就像 manu 建议的那样。装饰器 let updatedData = {}; const dataFromBd = { '1M': { name: 'anna' }, '1Y': {}, '2Y': {}, '3M': {}, '3Y': {}, '4Y': {}, '5Y': {}, '6M': {}, '7Y': {}, '10Y': {}, '14D': {}, '15Y': {}, '>20Y': {} }; for (let [key, value] of Object.entries(dataFromBd)) { updatedData[key] = 'hello'; if (key === '10Y') break; } console.log('data', updatedData); 可能适合您,它基本上将方法 @property 转换为属性 .df()。因此它只会在被特别调用时被读入。但这仅适用于类的实例。

.df