使用nctoolkit重网格化NetCDF文件时遇数值转换错误求助
问题描述
我用逐日数据通过ensemble_mean计算月平均,得到月平均文件后,以另一文件为目标网格,将0.1度分辨率的数据重网格化至0.25度。集合平均过程正常,但部分月份重网格化时出现如下错误:
ValueError: CDO error: Error (cdf_put_vara_double): NetCDF: Numeric conversion not representable. Tip: check if missing values are incorrectly set to large actual values!
其他月份重网格化可正常完成,使用的代码如下:
import nctoolkit as nc ds = nc.open_data("/home/omi_data/HCHO/data/2006/12/*.nc4") ds1=nc.open_data("/home/omi_data/NO2/data/2006/07/OMI-Aura_L3-OMNO2d_2006m0702_v003-2019m1121t032327.he5.ncml.nc4") ds.ensemble_mean('key_science_data_column_amount') ds.regrid(ds1) ds.to_nc('/home/omi_data/HCHO/data/2006/monthly_average/HCHO_0612.nc4')
解决思路与方案
检查数据极值与缺失值:错误核心是数值转换无法完成,大概率是异常月份的数据里存在超出目标数据类型范围的极端值,或是缺失值被错误设为过大/过小的数。先查看数据统计特征:
# 查看整体数据统计信息 ds.describe() # 单独检查目标变量的极值 print(ds.variables['key_science_data_column_amount'].min()) print(ds.variables['key_science_data_column_amount'].max())重置异常缺失值:如果发现缺失值是极端数值(远超出正常数据范围),手动修正缺失值设置:
# 根据数据实际范围调整阈值,比如将大于1e18的值设为缺失 ds.set_missing("key_science_data_column_amount", above=1e18)强制指定输出数据类型:重网格化后保存时,显式指定数据类型避免转换冲突:
ds.to_nc('/home/omi_data/HCHO/data/2006/monthly_average/HCHO_0612.nc4', dtype='float64')分步执行排查问题:先保存月平均中间文件,再单独做重网格化,确认是否是集合平均后的文件属性异常:
# 先保存月平均结果 ds.to_nc('/home/omi_data/HCHO/data/2006/monthly_average/tmp_HCHO_0612.nc4') # 重新打开后执行重网格化 ds_tmp = nc.open_data('/home/omi_data/HCHO/data/2006/monthly_average/tmp_HCHO_0612.nc4') ds_tmp.regrid(ds1) ds_tmp.to_nc('/home/omi_data/HCHO/data/2006/monthly_average/HCHO_0612.nc4')
内容的提问来源于stack exchange,提问作者jairovs
相关产品推荐
相关产品推荐

