我有一个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]