如何使用Xarray mfdataset在数据缺失变量时创建变量
检查并创建缺失变量的预处理代码修正
你这段代码的核心问题是判断变量是否存在的逻辑错误:如果dswrf不存在,radi['dswrf']会直接抛出KeyError,根本走不到判断步骤。
正确的做法是直接检查变量名是否在数据集的变量列表里,同时还要保证新增变量的维度和原数据集匹配,修正后的代码如下:
path_list = '/media/william/PhD/DownloadRadiation/GFS/20200716/gfs*.grib2' nan = float('nan') def preprocessing(radi): # 直接检查变量名是否存在于数据集的变量集合中 if 'dswrf' not in radi: # 基于现有变量生成同维度的NaN数组,避免维度不匹配问题 sample_var = next(iter(radi.data_vars.values())) return radi.assign(dswrf=xr.full_like(sample_var, nan)) return radi # 变量存在时直接返回原数据集,避免返回None报错 radi = xr.open_mfdataset(path_list, concat_dim='valid_time', preprocess=preprocessing, decode_times=False, combine='nested', engine='cfgrib', backend_kwargs={'filter_by_keys':{'shortName': 'dswrf', 'typeOfLevel':'surface'},'indexpath':''})
额外说明:
- 原代码里
assign(dswrf=nan)会生成标量变量,和原数据集维度大概率不兼容,后续拼接会触发错误,用xr.full_like可以保证维度一致。 - 预处理函数必须在变量存在时返回原数据集,否则会因返回None导致
open_mfdataset执行失败。
内容的提问来源于stack exchange,提问作者William Jacondino
相关产品推荐
相关产品推荐

