是否有 python netCDF4 命令/示例来更改 netCDF 文件中的全局元数据 _FillValue?我尝试替换 netCDF 文件中的所有 -ve 值,但在设置 _FillValue 属性之前,这不起作用
3 回答
我不相信 python netCDF4 对此有特定的功能,但NCO 的 ncatted是完成这项任务的理想工具。
从文档:
要将缺失值从 IEEE NaN 值更改为正常的 IEEE 数字,例如 1.0e36:
ncatted -a _FillValue,,m,f,1.0e36 in.nc
您还可以使用 cdo 将缺少的条目设置为另一个值,例如 999.0
cdo setmisstoc,999.0 in.nc out.nc
但是,从您的问题的描述来看,您似乎实际上不需要更改 _Fillvalue 的值,而是希望将负值设置为缺失。您可以通过使用 cdo 函数“set range to miss”来实现这一点
cdo setrtomiss,-1e8,0 in.nc out.nc
第一个参数是一个大的负数,小于数据集中的最小值。我在上面的答案中假设有问题的字段确实已经设置了一个值,否则您需要添加它,例如
cdo setattribute,field@_FillValue=-1.e32 infile outfile
一般来说,定义“全局” _FillValue 似乎会导致问题(例如,请参阅https://github.com/Unidata/netcdf-c/issues/458),无论如何,如果您有整数和浮点字段的组合然后定义默认浮动填充不能应用于所有字段。我个人认为,最好的做法是分别为每个字段定义填充值,并尽可能使用每种数据类型的默认值。
可以使用 cdo 包直接从 python 调用 cdo 命令。
_FillValue 特定于变量。使用 Python NetCDF4 库,我知道它只能在创建变量时指定。_FillValue 可以通过 CDO 进行更改。这就是我自己更改 _FillValue 的方式:
cdo -setattribute,Band1@_FillValue=-1.0 infile.nc outfile.nc