我想扩展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
的方法时,我希望它返回一个MyExtendedDataframe
的实例,并完成给定的操作。例如:
mydf = mydf[['field1', 'field2']]
print(type(mydf))
应该打印“MyExtendedDataframe”和
print(mydf.myAttribute)
索引操作后应打印“Dog”
我知道我可以为所有默认的Dask方法创建一个包装器方法,它将重建并返回我的类的一个实例。但这似乎是一个麻烦,并要求我更新我的模块,如果Dask的变化。有没有更简单的方法来实现这种行为
另一个可能的解决方案是使我的dask.dataframe.core.DataFrame
对象成为我的自定义类的属性,但这很笨拙,而且要访问和设置数据帧,我必须经常使用以下内容:
mydf.dataframe = mydf.dataframe[['field1', 'field2']]
目前没有回答
相关问题 更多 >
编程相关推荐