如何将一个xarray数据集转换为一个dask数据帧中的pandas数据帧

我有一个计算,希望将pandas数据帧作为输入.我想对存储在扩展到51GB的netCDF文件中的数据运行此计算 – 目前我一直用xarray.open_dataset打开文件并使用块(我的理解是这个打开的文件实际上是一个dask数组,所以一次只加载数据块到内存中).但是,我似乎无法利用这种延迟加载,因为我必须将xarray数据转换为pandas数据帧才能运行我的计算 – 我的理解是,此时所有数据都被加载进入记忆(这是坏事).

所以我想长话短说,我的问题是:如何从一个xarray数据集到一个pandas数据帧,而没有任何将我的整个数据加载到内存中的中间步骤?我已经看到dask与pandas.read_csv一起工作了,我看到它适用于xarray,但我不确定如何将已经打开的netCDF xarray数据集转换为块中的pandas数据帧.

谢谢,抱歉这个模糊的问题!

最佳答案
这是一个很好的问题.这应该是可行的,但我不太确定正确的方法是什么.

理想情况下,我们可以简单地实现一个xarray.Dataset.to_dask_dataframe()方法.但是这里有几个挑战 – 最大的挑战是dask目前不支持dataframes with a MultiIndex.

或者,您可能希望构造一个dask.Delayed对象列表,其中包含xarray.Dataset的每个块的pandas.DataFrames.为此,如果xarray有类似dask.array的to_delayed method用于将数据集转换为延迟数据集的数组,那么你可以随便懒洋洋地将其转换为DataFrame对象并进行计算.

我鼓励您在dask或xarray GitHub页面上打开一个问题进行讨论,特别是如果您可能对编写代码感兴趣.编辑:你可以找到问题here.

转载注明原文:如何将一个xarray数据集转换为一个dask数据帧中的pandas数据帧 - 代码日志