使用xarray读取CDS下载的ERA5 NetCDF数据数值异常问题
答复
依赖库相关问题排查结论
你当前环境的依赖版本组合存在已知兼容bug,是数据读取异常的最高概率诱因:
netCDF4 1.6.0初始版本存在明确的缩放偏移重复应用问题:ERA5的2m气温为了压缩存储,原始NetCDF文件中以16位整型存储,需要依靠变量自带的scale_factor和add_offset属性换算为实际物理值,该版本netCDF4会重复执行换算逻辑,直接导致读取出的数值完全偏离合理范围,常出现数千、数万级别的异常值。- 你当前用
xarray.open_mfdataset()读取单个文件属于非必要操作,该接口是为多文件批量读取设计的,默认会触发dask分块加载逻辑,和上述netCDF4的bug叠加时会进一步提升异常出现概率,单文件读取优先使用xarray.open_dataset()即可。 - 你列出的其余依赖(
xarray 2022.3.0、cartopy 0.20.3、matplotlib 3.5.2等)没有公开的、会导致ERA5数据读取错误的已知问题。 - 快速验证方式:读取后打印2m气温变量的最小值和最大值,正常ERA5 2m气温的合理区间为180K~330K(对应零下93摄氏度到零上57摄氏度),如果数值超出这个范围,直接将
netCDF4降级到1.5.8版本或升级到1.6.1以上版本,重新读取即可。
补充常见认知偏差:ERA5所有气温类变量默认单位是开尔文,不是摄氏度,如果你的可视化预期是摄氏度数值,需要手动减去273.15做单位转换,这类数值偏差不属于读取错误。
CDS平台故障相关影响排查结论
此前CDS的重大服务故障确实存在小概率遗留影响,但发生概率远低于上述依赖兼容问题:
- 故障期间部分下载请求会返回损坏的NetCDF文件,典型特征包括变量属性缺失、经纬度维度错乱、部分时次为无效填充值。你可以通过两个方式验证:
- 用
ncdump工具查看本地下载文件的头信息,检查2m气温变量是否包含scale_factor、add_offset、units三类核心属性,属性缺失即可判定文件损坏。 - 对比CDS网页端手动下载的同参数、同时次范围文件的大小,如果你用cdsapi下载的文件和网页端下载的文件大小差异超过10%,基本可以判定文件下载损坏。
- 用
- 目前官方已经修复故障导致的错误数据返回问题,确认文件损坏的话,删除本地文件后重新提交下载请求即可获取正常数据。
额外排查提示
如果修正依赖版本、确认文件正常后可视化结果仍不符合预期,优先检查两点:
- ERA5默认的经度存储范围是0°360°,如果你绘图用的底图是-180°180°经度范围,会出现经度错位的可视化异常,需要手动将经度转换为-180°~180°范围再绘图。
- 检查你绘图时传入的
normalizer参数的数值范围是否匹配实际数据的数值范围,范围设置错误也会导致可视化结果异常。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

