具有两次多索引的stack xarray.DataArray返回unformati

2024-10-02 20:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在同一数组上使用xr.DataArray.stack()方法两次,将一个多索引堆叠到新的多索引:

import numpy as np
import xarray as xr

da = xr.DataArray(np.random.rand(4,4,4,4), 
     [('latitude', range(4)), ('longitude', range(4)), 
      ('variables', range(4)), ('time', range(4))])

da.stack(dim1=('latitude','longitude')).stack(dim2=('variables','time')) # this works fine
da.stack(dim1=('latitude','longitude')).stack(dim2=('dim1','time'))

最后一行产生以下错误:

  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/xarray/core/dataarray.py", line 1102, in stack
    ds = self._to_temp_dataset().stack(**dimensions)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/xarray/core/dataset.py", line 2101, in stack
    result = result._stack_once(dims, new_dim)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/xarray/core/dataset.py", line 2070, in _stack_once
    idx = utils.multiindex_from_product_levels(levels, names=dims)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/xarray/core/utils.py", line 80, in multiindex_from_product_levels
    return pd.MultiIndex(levels, labels, sortorder=0, names=names)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/pandas/core/indexes/multi.py", line 132, in __new__
    result._set_names(names)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/pandas/core/indexes/multi.py", line 570, in _set_names
    self.levels[l].rename(name, inplace=True)
  File "/usr/local/Miniconda3-envs/envs/2018/envs/iacpy3_2018/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 1167, in set_names
    raise TypeError("Must pass list-like as `names`.")
TypeError: Must pass list-like as `names`.

动机:

我的原始数组与上面的玩具数据集具有相同的坐标,但维度不同。但是,要使用sklearn.ensemble.RandomForestRegressor,我需要在数据点的形状(平坦的纬度经度时间)和变量中使用数据,且不缺少值。因此,我想先堆叠纬度经度,移除所有海洋点,因为它们填充了np.nan,然后使用新创建的多重索引堆叠时间

问题:

在我看来,此错误似乎未实现该功能

  1. 如果是,原因为何
  2. 如果是,为什么没有更详细的错误消息
  3. xarray内是否有解决问题的方法(即,不将数据转换为numpy数组或类似的方法)

Tags: inpycorenamesstacklibpackagesusr