我有一个计算需要一个 pandas 数据框作为输入。我想对存储在扩展到 51GB 的 netCDF 文件中的数据运行此计算 - 目前我一直在使用 xarray.open_dataset
打开文件并使用 block (我的理解是这个打开的文件实际上是一个 dask 数组,所以一次只将数据 block 加载到内存中)。但是,我似乎无法利用这种延迟加载,因为我必须将 xarray 数据转换为 pandas 数据帧才能运行我的计算——我的理解是此时所有数据都已加载进入内存(这很糟糕)。
所以我想长话短说,我的问题是:如何在没有任何将整个数据加载到内存的中间步骤的情况下从 xarray 数据集转换为 pandas 数据框?我已经看到 dask 使用 pandas.read_csv
,我看到它使用 xarray,但我不确定如何将已经打开的 netCDF xarray 数据集转换为 block 中的 pandas 数据帧。
感谢并抱歉提出模糊的问题!
最佳答案
这是个好问题。这应该是可行的,但我不太确定正确的方法是什么。
理想情况下,我们可以简单地实现一个 xarray.Dataset.to_dask_dataframe()
方法。但是这里有几个挑战——最大的挑战是 dask 目前不支持 dataframes with a MultiIndex .
或者,您可能希望为 xarray.Dataset
的每个 block 构造一个包含 pandas.DataFrames
的 dask.Delayed
对象列表.为此,如果 xarray 有类似 dask.array 的 to_delayed
method 的东西就好了。用于将 Dataset 转换为延迟数据集数组,然后您可以将其延迟转换为 DataFrame 对象并进行计算。
我鼓励您在 dask 或 xarray GitHub 页面上提出问题进行讨论,特别是如果您可能有兴趣贡献代码。编辑:你可以找到那个问题 here .
关于python - 如何将 xarray 数据集转换为 dask 数据帧内的 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475884/