7

我有一个需要熊猫数据框作为输入的计算。我想对存储在扩展至 51GB 的 netCDF 文件中的数据运行此计算 - 目前我一直在xarray.open_dataset使用块打开文件(我的理解是这个打开的文件实际上是一个 dask 数组,所以只加载块一次将数据存入内存)。但是,我似乎无法利用这种延迟加载,因为我必须将 xarray 数据转换为 pandas 数据帧才能运行我的计算 - 我的理解是,此时所有数据都已加载进入内存(这很糟糕)。

所以我想长话短说,我的问题是:如何在没有任何中间步骤将我的整个数据加载到内存中的情况下从 xarray 数据集到 pandas 数据帧?我已经看到 dask 使用pandas.read_csv,并且我看到它使用 xarray,但我不确定如何将已经打开的 netCDF xarray 数据集转换为块中的 pandas 数据帧。

感谢和抱歉这个模糊的问题!

4

1 回答 1

6

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

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

或者,您可能dask.Delayed希望pandas.DataFramesxarray.Dataset. 为此,如果 xarray 有类似 dask.array 的to_delayed方法来将 Dataset 转换为延迟数据集的数组,那将是很好的,然后您可以将其延迟转换为 DataFrame 对象并进行计算。

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

于 2016-11-07T23:05:52.783 回答