从dask延迟对象的列表中构建一个dask数据帧



我有一个dask延迟对象Portfolio_perfs:的列表

type(Portfolio_perfs)
<class 'list'>
#print until 3
Portfolio_perfs[:3]
[Delayed('getitem-b7fd8629e2a0ecfe4e61ae6f39926140'), Delayed('getitem-af3225459229d541b73dc79319edaec2'), Delayed('getitem-0555389e6dd01031de85e293b8c42b85')]

每个延迟对象都是一个长度为2的numpy数组

Portfolio_perfs[0].compute()
array([0.75620425, 0.1835988 ])

我想在不使用dask.compute:的情况下构建以下数据帧

pd.DataFrame(dask.compute(*Portfolio_perfs))
0         1
0    0.756204  0.183599
1    0.825101  0.195705
2    0.792804  0.189422
3    0.786267  0.178194
4    0.860377  0.220204
..        ...       ...
595  0.636857  0.139955
596  0.925144  0.218462
597  0.925077  0.213963
598  0.922016  0.206081
599  0.770950  0.170273
[600 rows x 2 columns]

如何在不经过dask.compute的情况下构建此dask数据帧?谢谢

由于每个延迟对象都是一个numpy数组,因此您对da.from_delayed():感兴趣

dask_array = da.from_delayed(Portfolio_perfs)

或者,也可以将numpy数组转换为panda数据帧,然后使用:

dd.from_delayed()

请注意,使用pd.DataFrame是不可能的,因为Panda不知道如何处理延迟的对象,所以您需要使用dask.dataframe来执行此任务。

尝试使用dd.from_delayed,但出现以下错误

dd.from_delayed(Portfolios_perfs)
TypeError: Expected partition to be DataFrame, Series, or Index, got numpy.ndarray

在使用dd.from_delayed()之前,必须将我的numpy数组转换为数据帧

Portfolios_perfs[0].compute()
0         1
0  0.764544  0.176615
#
dd_final=dd.from_delayed(Portfolios_perfs)
dd_final
Dask DataFrame Structure:
0        1
npartitions=300
float64  float64
...      ...
...                  ...      ...
...      ...
...      ...
Dask Name: from-delayed, 900 tasks
#
#
dd_final.compute()
0         1
0   0.764544  0.176615
0   0.753957  0.176094
0   0.891951  0.180247
0   0.813954  0.180084
0   1.089214  0.260875
..       ...       ...
0   0.655544  0.138117
0   0.944792  0.233119
0   0.720967  0.157746
0   0.774837  0.181025
0   0.770270  0.165283
[300 rows x 2 columns]

最新更新