问题描述
也许它的形式很糟糕,但是有没有办法就地更新 xarray
DataArray 的单个值?我正在执行趋势分析,其中我对每个(纬度、经度)单元格进行子集化并在时间片上进行分析。
我希望能够执行以下操作:
output_array.loc[dict(lat=i,lon=j)]['intercept'] = intercept
或
output_array.sel(lat=i,lon=j)['intercept'] = intercept
其中 intercept
是要在 output['intercept']
DataArray 中更新的单个值(浮点数)
解决方法
xarray.DataArray
基本上是 numpy
ndarray 的包装器,这意味着您可以修改底层的 numpy
数组。
您可以使用 .data
或 .values
属性访问(和修改)数组。
import xarray as xr
# load testdata
x = xr.tutorial.load_dataset("air_temperature")
# keep second reference of array just for showcasing
arr = x.air.data
# it's the same
assert arr is x.air.data
# indices
i,j,k = (0,0)
print(x.air.data[i,k],arr[i,k])
# 241.2 241.2
# new value
x.air.data[i,k] = 0
# check
print(x.air.data[i,k])
# 0.0 0.0
,
要添加到@val 的优秀答案中,可以直接改变数组,而无需通过 .data
属性:
In [5]: x.air[i,k] = 0
In [6]: print(x.air.data[i,k])
0.0 0.0