如何对Xarray数据集的range坐标执行标量加法运算?
修改Xarray中range坐标值的正确方法
在Xarray中,直接通过赋值语句da.range = da.range + 200无法修改坐标,这是因为DataArray的坐标默认是**不可变(immutable)**的,直接赋值会被静默忽略。要实现给range坐标添加静态标量的需求,你可以使用以下两种方法:
方法1:使用assign_coords重新赋值坐标
这是Xarray推荐的不可变操作方式,直接计算新的range值并更新坐标:
# 计算新的range坐标值 new_range = da.range + 200 # 更新坐标并返回新的DataArray da = da.assign_coords(range=new_range)
方法2:使用coords.update原地修改
如果你需要直接在原对象上修改(注意:此操作会改变原对象,不符合Xarray默认的不可变设计,但可以实现需求):
da.coords.update({'range': da.range + 200})
完整示例代码
import xarray as xr import numpy as np import pandas as pd time = pd.date_range("2006-02-21", freq="s", periods=4) # 创建DataArray并添加初始range坐标 da = xr.DataArray(np.random.randn(4, 4), dims=("range", "time"), coords={"time": time}) da = da.assign_coords(range=('range', [1.56,5.233,10.98,17.43])) # 修改range坐标 da = da.assign_coords(range=da.range + 200) print(da)
执行后会输出你期望的结果:
Coordinates: * range (range) float64 201.56 205.233 210.98 217.43 * time (time) datetime64[ns] 2006-02-21 ... 2006-02-21T00:00:03
内容的提问来源于stack exchange,提问作者Swawa
相关产品推荐
相关产品推荐

