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

How to convert an xarray dataset to pandas dataframes inside a dask dataframe

我有一个计算需要 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.

或者,您可能想要为 xarray.Dataset 的每个块构造一个包含 pandas.DataFramesdask.Delayed 个对象的列表。为此,如果 xarray 有类似 dask.array 的 to_delayed method 的东西,用于将 Dataset 转换为延迟数据集数组,然后您可以将其延迟转换为 DataFrame 对象并进行计算,那就太好了。

我鼓励您在 dask 或 xarray GitHub 页面上提出问题进行讨论,尤其是如果您可能对贡献代码感兴趣的话。编辑:您可以找到该问题 here.