当前位置: 首页 > 知识库问答 >
问题:

如何在dask数据帧内将xarray数据集转换为熊猫数据帧

宁弘亮
2023-03-14

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

所以我想长话短说,我的问题是:我如何从一个xray数据集到熊猫数据帧,而不需要任何中间步骤将我的整个数据加载到内存中?我见过dask与pandas.read_csv一起工作,我也看到它与xray一起工作,但是我不确定如何将已经打开的netCDF xray数据集转换成大块的熊猫数据帧。

谢谢你,很抱歉提出了这个模糊的问题!

共有1个答案

郭通
2023-03-14

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

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

或者,您可能希望为xarray.Dataset的每个块构建一个包含pandas.DataFramesdask.Delayed对象列表。为此,如果xarray有类似dask.array的to_delayed方法将数据集转换为延迟数据集数组,然后您可以将延迟数据集延迟转换为数据帧对象并进行计算,那就太好了。

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

 类似资料:
  • 我想读取ArcGIS形状文件的文件,并将其转储到数据帧中。我目前正在使用dbf包。 显然,我已经能够将文件作为一个表加载,但还不能理解如何解析它并将其转换为一个数据帧。怎么做? 这就是我所处的困境: Python将此语句作为输出返回,坦率地说,我不知道该如何处理: 编辑 我的原始示例:

  • 我对熊猫有些陌生。我有一个熊猫数据框,是一行23列。 我想把它转换成一个系列?我想知道做这件事最像蟒蛇的方式是什么? 我试过pd。系列(我的结果),但它抱怨。它还没有聪明到意识到它仍然是数学术语中的“向量”。 谢谢!

  • 如何将pandas数据帧(21 x 31)转换为numpy数组? 例如: 数组_1(n_1,n_2,n_3,…,n31) 数组_2(n_1,n_2,n_3,…,n31) 数组21(n_1,n_2,n_3,…,n31) 我尝试了以下代码段: .. 并得到如下结果: 问题是第二个方括号太多了。我该如何解决这个问题?

  • 假设熊猫数据帧如下所示: 如何将第三行(如row3)提取为pd数据帧?换句话说,row3.shape应该是(1,5),row3.head()应该是:

  • 我有一个由180M行和4列(所有整数)组成的熊猫数据帧。我把它保存为泡菜文件,文件是5.8GB。我正在尝试使用将熊猫数据帧转换为 pyspark 数据帧,但不断收到“内存不足”错误。 错误代码段为 我有超过200GB的内存,我不认为缺少物理内存是个问题。我了解到有多种内存限制,例如驱动内存-这可能是原因吗? 我该如何解决这个问题?

  • 我使用熊猫数据框来清理和处理数据。但是,我需要将其转换为numpy ndarray,以便使用利用矩阵乘法。我将数据框转换为具有以下内容的列表列表: 这将返回以下结构: 然后我将其转换为如下所示的numpy数组: 然而,以下打印: 给出这个结果: 但是,我需要它们都是numpy数组。如果它不是来自熊猫数据帧,我只是转换一个硬编码列表,那么它们都是Ndarray。当列表是从数据帧生成的时,如何获取该列