我使用read_csv((读取一长串csv文件并返回两个数据帧。我已经设法通过使用dask来加快这个动作。不幸的是,我在使用dask时无法返回多个变量。
下面的最低工作示例复制了我的问题:
@delayed(nout = 2)
def function(a):
d = 0
c = a + a
if a>4: # random condition to make c and d of different lenghts
d = a * a
return pd.DataFrame([c])#, pd.DataFrame([d])
list = [1,2,3,4,5]
dfs = [delayed(function)(int) for int in list]
ddf = dd.from_delayed(dfs)
ddf.compute()
欢迎提出任何解决这一问题的想法。谢谢
delayed
装饰器有nout
参数,所以类似的东西可能会起作用:
from dask import delayed
@delayed(nout=2)
def function(a,b):
c = a + b
d = a * b
return c, d
delayed_c, delayed_d = function(2, 3)
从这个问题来看,数据帧是在哪一步出现的还不清楚,但问题的关键部分(从延迟的dask返回多个值(是通过使用nout
来回答的,请参阅此答案以了解完整的详细信息。
更新:
更新问题中的延迟函数返回一个数据帧元组,这意味着应该对元组的每个元素调用dd.from_delayed
,或者应该对元组进行解压缩:
dfs = [delayed_value for int in list for delayed_value in function(int)]
ddf = dd.from_delayed(dfs)
ddf.compute()