WRF输出转NetCDF后XTIME移除及XLAT/XLONG维度调整问题
WRF合并NetCDF文件的两个问题解决方案
问题1:移除输出文件中的XTIME变量
XTIME是WRF输出文件默认携带的时间变量,即便未显式提取,xarray读取时会默认加载所有变量。解决方式有两种:
方法1:读取时直接排除XTIME
在读取单个WRF文件阶段,通过drop_variables参数跳过XTIME,从源头避免带入合并流程:
import xarray as xr import glob # 获取当月所有目标wrfout文件 file_list = sorted(glob.glob("wrfout_d02_2020-01-*_00:00:00")) # 读取时排除XTIME变量 ds_list = [xr.open_dataset(f, drop_variables=['XTIME']) for f in file_list] # 合并数据集 merged_ds = xr.concat(ds_list, dim='Time')
方法2:合并后删除XTIME
若已完成合并操作,直接在最终数据集上删除该变量:
merged_ds = merged_ds.drop_vars('XTIME')
问题2:将XLAT/XLONG转为二维格式并调整变量顺序
WRF输出的XLAT/XLONG虽带有Time、ymd维度,但各时间步的经纬度值完全一致,可提取单时间步数值去除冗余维度,再重新添加并调整变量顺序:
# 提取第一个时间步的XLAT/XLONG,去除Time和ymd维度 xlat_2d = merged_ds['XLAT'].isel(Time=0, ymd=0).squeeze() xlong_2d = merged_ds['XLONG'].isel(Time=0, ymd=0).squeeze() # 删除原有的多维度XLAT/XLONG merged_ds = merged_ds.drop_vars(['XLAT', 'XLONG']) # 添加二维格式的XLAT/XLONG,指定维度为(south_north, west_east) merged_ds['XLAT'] = (('south_north', 'west_east'), xlat_2d.values) merged_ds['XLONG'] = (('south_north', 'west_east'), xlong_2d.values) # 调整变量顺序,将XLAT、XLONG置于最前列 var_order = ['XLAT', 'XLONG'] + [var for var in merged_ds.data_vars if var not in ['XLAT', 'XLONG']] merged_ds = merged_ds[var_order]
最终保存文件
完成上述修改后,保存为目标格式的NetCDF文件:
output_path = "WRF_PGW_2C_re-202001-d02-hourly.nc" merged_ds.to_netcdf(output_path, format='NETCDF4', complevel=4)
内容的提问来源于stack exchange,提问作者rock0789




