Python中对含多维度的netCDF日降水数据重采样生成月均值报错
解决xarray resample时的
_UFuncNoLoopError错误 错误原因
你遇到的numpy.core._exceptions._UFuncNoLoopError确实和bnds维度相关:你的数据集里time_bnds(或其他带bnds的变量)是字节字符串类型(dtype('S1')),而resample(time='1MS').mean()默认会对数据集中所有变量执行均值计算。numpy的加法ufunc无法对字符串类型执行累加/均值操作,因此触发报错。
解决方案
你可以根据需求选择以下任意一种方法:
1. 仅对目标变量(如降水pr)做重采样
如果只需要降水的月均值,直接指定变量即可:
eu11_monthly = eu11['pr'].resample(time='1MS').mean()
2. 筛选数值型变量后重采样
如果需要保留其他数值型变量,同时排除字符串类型的bnds变量:
# 筛选出所有数值型(整数/浮点数)且不含bnds后缀的变量 valid_vars = [var for var in eu11.data_vars if eu11[var].dtype.kind in ('i', 'f') and not var.endswith('_bnds')] eu11_monthly = eu11[valid_vars].resample(time='1MS').mean()
3. 删除bnds相关变量后重采样
如果不需要time_bnds这类边界变量,直接删除后再重采样:
# 删除所有带bnds后缀的变量 eu11_clean = eu11.drop_vars([var for var in eu11.data_vars if var.endswith('_bnds')]) # 或者单独删除time_bnds:eu11_clean = eu11.drop('time_bnds') eu11_monthly = eu11_clean.resample(time='1MS').mean()
内容的提问来源于stack exchange,提问作者CoolMathematician
相关产品推荐
相关产品推荐

