我尝试在同一数组上使用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
,然后使用新创建的多重索引堆叠时间
问题:
在我看来,此错误似乎未实现该功能
xarray
内是否有解决问题的方法(即,不将数据转换为numpy数组或类似的方法)李>
目前没有回答
相关问题 更多 >
编程相关推荐