2016-11-07 38 views
5

我有一个计算需要一个熊猫数据框作为输入。我想对存储在扩展到51GB的netCDF文件中的数据运行这个计算 - 目前我已经打开文件xarray.open_dataset并使用块(我的理解是,这个打开的文件实际上是一个dask数组,因此只有加载数据块一次进入内存)。然而,我似乎无法利用这种惰性加载,因为我必须将xarray数据转换为熊猫数据框才能运行我的计算 - 而且我的理解是,在那时所有数据都会加载进入记忆(这是不好的)。所以我想长话短说,我的问题是:我怎么能从一个xarray数据集到一个熊猫数据框,没有任何中间步骤将我的整个数据加载到内存中?我已经看到dask与pandas.read_csv工作,我看到它与xarray一起工作,但我不知道如何将已打开的netCDF xarray数据集转换为大块中的pandas数据框。如何将xarray数据集转换为dask数据框内的熊猫数据框

感谢和抱歉的模糊问题!

回答

3

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

理想情况下,我们可以简单地实施xarray.Dataset.to_dask_dataframe()方法。但是这里有几个挑战 - 最大的挑战是dask目前不支持dataframes with a MultiIndex

或者,您可能想要为xarray.Dataset的每个块构建一个dask.Delayed对象列表,其中包含pandas.DataFrames。为此,如果xarray将dask.array的to_delayed method用于将数据集转换为延迟数据集数组,那么该数组将会很好,然后您可以将其延迟地转换为DataFrame对象并进行计算。

我鼓励你在dask或xarray GitHub页面上打开一个问题来讨论,特别是如果你可能有兴趣贡献代码。编辑:你可以找到这个问题here

相关问题