微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将python dask的输出来自xarray保存到pandas数据帧中

如何解决如何将python dask的输出来自xarray保存到pandas数据帧中

我对尝试并行化我的 python 代码很陌生。我正在尝试对 xarray 执行一些分析,然后用结果填充熊猫数据框。数据帧的列是独立的,所以我认为使用 dask 延迟并行化应该是微不足道的,但无法弄清楚如何。我的 xarray 非常大,所以这个循环需要一段时间,而且内存很大。它也可以按时间分块,如果这样更容易的话(这可能有助于记忆)!

这是非并行版本:

from time import sleep
import time
import pandas as pd
import dask.dataframe as dd

data1 = np.random.rand(4,3,3)
data2=np.random.randint(4,size=(3,3))

locs1 = ["IA","IL","IN"]
locs2 = ['a','b','c']
times = pd.date_range("2000-01-01",periods=4)

xarray1 = xr.DataArray(data1,coords=[times,locs1,locs2],dims=["time","space1","space2"])
xarray2= xr.DataArray(data2,coords=[locs1,dims=[ "space1","space2"])

def delayed_where(xarray1,xarray2,id):
    sleep(1)
    return xarray1.where(xarray2==id).mean(axis=(1,2)).to_dataframe(id)

final_df=pd.DataFrame(columns=range(4),index=times)

for column in final_df:
    final_df[column]=delayed_where(xarray1,column)

我想并行化 for 循环,但已经尝试过:

final_df_delayed=pd.DataFrame(columns=range(4),index=times)

for column in final_df:
    final_df_delayed[column]=delayed(delayed_where)(xarray1,column)

final_df.compute()

或者可能是 dask 延迟了?

final_df_dd=dd.from_pandas(final_df,npartitions=2)
for column in final_df:
    final_df_dd[column]=delayed(delayed_where)(xarray1,column)

final_df_dd.compute()

但这些都不起作用。有人可以帮忙吗?

解决方法

您正确使用了延迟,但无法按照您指定的方式构建 dask 数据框。

character

请注意,枚举是获得正确列顺序的笨拙方法,但您的实际问题可能会引导您以更好的方式指定它(例如,通过将每一列明确指定为单独的参数)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。