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

标签 python pandas dask python-xarray

我有一个计算需要一个 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.DataFramesdask.Delayed 对象列表.为此,如果 xarray 有类似 dask.array 的 to_delayed method 的东西就好了。用于将 Dataset 转换为延迟数据集数组,然后您可以将其延迟转换为 DataFrame 对象并进行计算。

我鼓励您在 dask 或 xarray GitHub 页面上提出问题进行讨论,特别是如果您可能有兴趣贡献代码。编辑:你可以找到那个问题 here .

关于python - 如何将 xarray 数据集转换为 dask 数据帧内的 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475884/

相关文章:

python - 如何取消进行中的 Requests.Session.Get 请求?

python - 制作pandas数据透视表时如何保持数据框的顺序

pandas - 如何从 pandas 数据帧创建稀疏矩阵?

python - 在 Dask DataFrame 中汇总分类数据

python - 为什么map_block函数运行两次?

python - Dask SVD 计算和中间值的重用

python - 让 libsass-python 使用系统 libsass 库而不是编译它

python - 如何缩短这个二维数组代码?

python - 从python中的JSON字符串中提取特定值

python - 如何将 Pandas 数据框转换为嵌套的 json