我刚刚开始使用Xarray DataArray
,我不确定如何将新坐标轴添加到现有维度。任何人都可以指出我正确的方向。
所以我有一个看起来像的现有数组:
demo_results = np.zeros([10, 20, 5])
cols = ['c1', 'c2', 'c3', 'c4', 'c5']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
所以这将给我一个3维数组,其中有5个坐标沿着' sim'尺寸。现在我想在' sim'上添加一个额外的坐标。尺寸命名为' c6',但我不知道该怎么做?我没有在文档中看到任何信息或示例。在pandas
中,我只会像df.loc[:, 'c6] = 0
那样引用新维度,这样可行。但我尝试使用Xarray
之类的内容,例如:
t.loc['sim', 'c6'] = 0
但我发错了:TypeError: invalid indexer array, does not have integer dtype: array('sim', dtype='<U3')
我想我仍然在掌握DataArray索引。
答案 0 :(得分:1)
Xarray在引擎盖下使用numpy / dask数组,因此不支持自动扩展(就像在Pandas中一样)。
如果您提前知道列的名称和列数,则可以提前创建整个区域。 E.g。
demo_results = np.zeros([10, 20, 6])
cols = ['c1', 'c2', 'c3', 'c4', 'c5', 'c6']
t = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
t.loc[{'sim': 'c6'}] = -999. # or whatever value you like
注意,当您使用不支持项目分配的dask数组时,这将不起作用。
如果你正在使用dask,不能提前创建完整的数组,你可以一直使用xarray.concat
:
demo_results = np.zeros([10, 20, 1]) - 999.
cols = ['c6']
t6 = xr.DataArray(demo_results, coords={'sim': cols}, dims=('run', 'year', 'sim'))
# concat old+new
t = xr.concat([t, t6], dim='sim')