扩展Dask Dataframe对象

时间:2019-07-01 22:05:18

标签: python pandas dataframe object dask

我想扩展dask.dataframe Dataframe对象并添加新的属性/方法,而无需重写大多数预先存在的Dask函数。

例如,如果我有一个课程:

from dask.dataframe import DataFrame
class MyExtendedDataframe(DataFrame):
    def __init__(self, df):
        super(DataFrame, self).__init__(df.dask, df._name, df._meta, df.divisions)
        self.myAttribute = "Dog"
    def myMethod(self):
        return self.dropna()

我可以创建此对象的实例(下),该实例具有Dask DataFrame对象的所有属性。

df = dd.read_csv('mydata.csv')
mydf = MyExtendedDataframe(df)
print(type(mydf))

此打印:“ MyExtendedDataframe”

然后我可以在MyExtendedDataframe对象上调用Pandas链接函数。

mydf = mydf['field1', 'field2']]
print(type(mydf))

以上显示:dask.dataframe.core.DataFrame,显然属性MyAttribute和方法MyMethod不是结果实例的成员。

换句话说,我希望新类具有dask.dataframe.core.DataFrame类的所有属性,但是当我调用属于dask.dataframe.core.DataFrame的方法时,我希望它返回{{1 }}完成给定的操作。例如:

MyExtendedDataframe

应打印“ MyExtendedDataframe”和

mydf = mydf[['field1', 'field2']]
print(type(mydf))

索引操作后应打印“ Dog”。


我知道我可以为所有默认的Dask方法创建一个包装方法,该方法将重构并返回类的实例。但这似乎很麻烦,并且如果Dask发生更改,将需要我更新模块。有没有更简单的方法来实现此行为?

另一种可能的解决方案是使我的print(mydf.myAttribute) 对象成为我的自定义类的属性,但是这种接缝显得笨拙,而且要访问和设置数据框,我将不得不不断使用类似的东西:

dask.dataframe.core.DataFrame

0 个答案:

没有答案