Xarray相加同维度NetCDF文件时时间维度变为0的问题求助
问题:Xarray相加NetCDF数据集后时间维度变为0
问题背景
我有多个NetCDF数据集,每个仅包含t2m变量,维度均为(longitude: 38, latitude: 35, time: 1)。希望用Xarray将这些数据集相加,得到每个地理单元的变量总和。其中两个数据集i_january90和i_february89的空间范围、维度完全一致,但相加后结果的时间维度变成了time: 0。
复现代码
import xarray as xr import numpy as np # 切换到工作目录 cd (Path to my drive working folder) i_january90 = xr.open_dataset("i_january90.nc") i_february89 = xr.open_dataset("i_february89.nc") # 两个数据集相加 I = i_january90 + i_february89
已尝试的无效处理
考虑到数据存在缺失值,尝试用xr.where处理,但时间维度仍为0:
I = xr.where(i_january90.notnull() & i_february89.notnull(), i_january90+i_february89, np.nan)
原因分析
时间维度消失的核心原因是两个数据集的time坐标值不匹配。Xarray做算术运算时会自动对齐坐标:如果两个数据集的time坐标没有交集,运算后该维度会被过滤为空(size=0)。哪怕两个数据集的time维度长度都是1,但如果具体时间戳不同(比如一个是1990年1月,一个是1989年2月),Xarray会判定时间无重叠,相加后time维度就会变成0。
解决方案
根据需求,有两种常用处理方式:
方式1:忽略时间坐标,按位置直接相加
如果不需要保留时间坐标,或确认两个数据集的时间维度是对应位置的代表值,可先移除time坐标再相加:
# 移除time坐标后相加 I = i_january90.drop_vars("time") + i_february89.drop_vars("time") # 或仅针对t2m变量操作 I = i_january90["t2m"] + i_february89["t2m"]
方式2:统一时间坐标后相加
如果需要保留时间维度,可手动对齐两个数据集的time坐标,或合并时间维度后求和:
# 将其中一个数据集的time坐标修改为与另一个对齐 i_february89_aligned = i_february89.assign_coords(time=i_january90.time) I = i_january90 + i_february89_aligned # 或合并所有时间点后沿time维度求和 combined = xr.concat([i_january90, i_february89], dim="time") I = combined.sum(dim="time")
内容的提问来源于stack exchange,提问作者oreobrown
相关产品推荐
相关产品推荐

