如何在dask dataframe内将xarray数据集转换为pandas数据帧

7
我有一个期望输入为pandas数据框的计算。我希望在一个扩展到51GB的netCDF文件中运行此计算,目前我一直在使用 xarray.open_dataset 打开文件并使用chunks(我的理解是打开的文件实际上是一个dask数组,因此每次只加载数据块到内存中)。然而,似乎无法利用这种惰性加载,因为我必须将xarray数据转换为pandas数据框才能运行计算 - 在那个时候我理解所有数据都被加载到内存中了(这很糟糕)。
所以,长话短说,我的问题是:如何从xarray数据集获取pandas数据框,而不需要任何中间步骤将全部数据加载到内存中?我看过dask与pandas.read_csv 一起工作,也看到它与xarray一起工作,但我不确定如何将已打开的netCDF xarray数据集以块的方式转换为pandas数据框。
谢谢,对于这个模糊的问题感到抱歉!
1个回答

6
这是一个好问题。这应该是可行的,但我不确定正确的方法是什么。
理想情况下,我们可以简单地实现一个xarray.Dataset.to_dask_dataframe()方法。但是这里有几个挑战 - 最大的挑战是dask目前不支持带有MultiIndex的数据框架
或者,您可能希望构建一个dask.Delayed对象列表,其中每个块的xarray.Dataset都包含一个pandas.DataFrame。为此,如果xarray有像dask.array的to_delayed方法一样的东西,将Dataset转换为延迟的Dataset数组,然后您可以懒惰地将其转换为DataFrame对象并进行计算,这将是很好的。

如果您有兴趣贡献代码,我建议您在dask或xarray的GitHub页面上开一个问题进行讨论。编辑:您可以在这里找到该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接