如何为xarray DataArray的现有坐标扩展值?求简便实现方法
问题描述
假设我们打开一个NetCDF文件,得到如下结构的DataArray da:
<xarray.DataArray (x: 2, y: 3)> array([[0.50793919, 0.49505336, 0.19573345], [0.7830897 , 0.82954952, 0.19427877]]) Coordinates: * x (x) int64 0 1 * y (y) int64 0 1 2
我们的目标是得到扩展x维度后的DataArray da_new,结构如下:
<xarray.DataArray (x: 4, y: 3)> array([[0.50793919, 0.49505336, 0.19573345], [0.7830897 , 0.82954952, 0.19427877], [ nan, nan, nan], [ nan, nan, nan]]) Coordinates: * x (x) int64 0 1 2 3 * y (y) int64 0 1 2
目前可通过新建DataArray再填充的方式实现,代码如下:
da_new = xr.DataArray( data = np.full([4,3], fill_value=np.nan), dims = ['x','y'], coords=dict( x = range(4), y = range(3) ) ) da_new.loc[0:1,:] = da
但该方法在DataArray维度较多时操作繁琐,请问是否有更简洁直观的实现方法?
简洁实现方法
有两种更高效的方式可以实现需求:
方法1:使用reindex方法
reindex是xarray专门用于调整坐标维度的工具,直接指定新的x坐标范围,缺失值自动用nan填充,无需手动创建空数组:
da_new = da.reindex(x=range(4), fill_value=np.nan)
该方法会自动保留原有的所有其他维度(比如示例中的y维度),仅扩展目标x维度,在多维度场景下能避免手动指定所有维度坐标的冗余操作。
方法2:使用pad方法
如果需要在原维度的末尾固定扩展指定长度的元素,可使用pad方法:
da_new = da.pad(x=(0, 2), mode='constant', constant_values=np.nan)
其中x=(0,2)表示在x维度的前部补0个元素、后部补2个元素,mode='constant'配合constant_values=np.nan指定填充值为nan。
这两种方法都无需手动构建新的DataArray,代码更简洁,适配多维度DataArray场景。
内容的提问来源于stack exchange,提问作者Yongwu Xiu
相关产品推荐
相关产品推荐

