python Xarray DataArray:如何向现有维度添加其他坐标

时间:2018-05-15 06:21:31

标签: python python-xarray

我刚刚开始使用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索引。

1 个答案:

答案 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')