pandas - Dask:将 dask.DataFrame 转换为 xarray.Dataset

标签 pandas dask python-xarray dask-dataframe

这在 Pandas 中是可能的。
我想用 dask 来做。
编辑:在 dask 上提出 here
仅供引用,您可以从 xarray.Dataset to a Dask.DataFrame
使用 .to_xarry 的 Pandas 解决方案:

import pandas as pd
import numpy as np

df = pd.DataFrame([('falcon', 'bird', 389.0, 2),
                   ('parrot', 'bird', 24.0, 2),
                   ('lion', 'mammal', 80.5, 4),
                   ('monkey', 'mammal', np.nan, 4)],
                  columns=['name', 'class', 'max_speed',
                           'num_legs'])

df.to_xarray()
<xarray.Dataset>
Dimensions:    (index: 4)
Coordinates:
  * index      (index) int64 0 1 2 3
Data variables:
    name       (index) object 'falcon' 'parrot' 'lion' 'monkey'
    class      (index) object 'bird' 'bird' 'mammal' 'mammal'
    max_speed  (index) float64 389.0 24.0 80.5 nan
    num_legs   (index) int64 2 2 4 4
Dask解决方案?
import dask.dataframe as dd

ddf = dd.from_pandas(df, 1)

?
可以使用 xarray 寻找解决方案,但我认为它只有 .from_dataframe .
import xarray as xr

ds = xr.Dataset()
ds.from_dataframe(ddf.compute())

最佳答案

我一直在寻找类似的东西并创建了这个函数(它并不完美,但效果很好)。
它还将所有 dask 数据保存为 dask 数组,以节省内存等。

import xarray as xr
import dask.dataframe as dd
        
def dask_2_xarray(ddf, indexname='index'):
     ds = xr.Dataset()
     ds[indexname] = ddf.index
     for key in ddf.columns:
         ds[key] = (indexname, ddf[key].to_dask_array().compute_chunk_sizes())
     return ds
            
# use:
ds = dask_2_xarray(ddf)
示例:
path = LOCATION TO FILE
ddf_test = dd.read_hdf(path, key="/data*", sorted_index=True, mode='r')
ds = dask_2_xarray(ddf_test, indexname="time")
ds
结果:
Result Array In Jup. Lab
大部分时间都花在计算块大小上,所以如果有人知道更好的方法,它会更快。

关于pandas - Dask:将 dask.DataFrame 转换为 xarray.Dataset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60896303/

相关文章:

python - 根据连续行的空条件合并任意数量的文本列

python - 访问 pandas 数据列中的 total_seconds()

pandas - 如何读取包含许多 CSV 文件的许多大型 .7z 文件?

Dask 很慢,状态页面中显示许多磁盘读取和磁盘写入 block

python - xarray 中的 bool 索引

python - 如何分割/细化 xarray 数据集中的维度?

Python:DataFrame.melt - 如何选择一系列列作为标识符变量?

python - 如何在不引用列的情况下过滤 pandas DataFrame?

python - 更新 Pandas 数据帧子集的子集的值对于大型数据集来说太慢了

python - 从现有 NetCDF 文件创建新的 NetCDF,同时保留原始文件的压缩