如何使用分配将新变量添加到Python中的xarray.Dataset,具有相同的时间、纬度、经度维度?

问题描述 投票:0回答:1

我有一个 xarray.Dataset,看起来像:

print(ds2)
<xarray.Dataset>
Dimensions:      (time: 46, latitude: 360, longitude: 720)
Coordinates:
  * time         (time) datetime64[ns] 1976-01-01 1977-01-01 ... 2021-01-01
  * latitude     (latitude) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75
  * longitude    (longitude) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8
Data variables:
    Glacier      (time, latitude, longitude) float64 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
    Uncertainty  (time, latitude, longitude) float64 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>

我也有一个具有相似尺寸的光栅:

print(np.shape(rgi_raster))
(1, 360, 720)

如何将 rgi_raster 添加到 xarray.Dataset 中,以便它在 Glacier 和 Uncertainty 变量上具有相同的时间、纬度、经度坐标?

我尝试过:

ds2=ds2.assign(rgi_raster=rgi_raster)

但这给出了:

<xarray.Dataset>
Dimensions:      (time: 46, latitude: 360, longitude: 720, band: 1, x: 720,
                  y: 360)
Coordinates:
  * time         (time) datetime64[ns] 1976-01-01 1977-01-01 ... 2021-01-01
  * latitude     (latitude) float64 89.75 89.25 88.75 ... -88.75 -89.25 -89.75
  * longitude    (longitude) float64 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8
  * band         (band) int64 1
  * x            (x) float64 -179.8 -179.2 -178.8 -178.2 ... 178.8 179.2 179.8
  * y            (y) float64 -89.75 -89.25 -88.75 -88.25 ... 88.75 89.25 89.75
    spatial_ref  int64 0
Data variables:
    Glacier      (time, latitude, longitude) float64 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
    Uncertainty  (time, latitude, longitude) float64 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
    rgi_raster   (band, y, x) float64 19.0 19.0 19.0 19.0 ... 10.0 10.0 10.0
python dataset python-xarray assign
1个回答
0
投票

如果知道坐标相同,可以直接构造一个DataArray并将其添加到Dataset中:

ds['rgi_raster'] = xr.DataArray(rgi_raster, dims=('band', 'latitude', 'longitude'))

注意:您的示例栅格的第一个维度的形状为 1。这不能是时间,但可以是其他内容(例如波段)。

© www.soinside.com 2019 - 2024. All rights reserved.