将现有 netcdf 文件中的 Nans 替换为 -9999 Python

replace Nans with -9999 in existing netcdf file with Python

我有一个 netcdf 文件,其中一个变量包含 nan。我想读取文件,然后将 nans 替换为 -9999。然后保存新的 netcdf 文件的更改。到目前为止我有这个:

import netCDF4 as nc
from netCDF4 import Dataset
import numpy as np

f = Dataset('anen_12km_1yr_san_angelo_00Z_100m_38_small_2014.nc','r+')
f.variables['wspd_wrf_m'][:][f.variables['wspd_wrf_m'][:] == np.nan] = -9999.
f.close() 

当我重新打开此文件并打印出此变量的 np.max 或 np.min 时,我仍然得到 nan 而不是 -9999。我需要做什么来替换这个netcdf文件中的nans,并用替换的nans的变化重写一个新的netcdf文件?

您不能使用 == np.nan 比较。考虑这个例子:

arr = np.random.random(3)
arr[1] = np.nan
print(arr)
print(arr == np.nan)

这给出:

array([ 0.88978822, nan, 0.71066851])

[False False False]

检查 NaN 的正确方法是使用 np.isnan:

print(np.isnan(arr))

哪个returns:

[False True False]

您可以使用它来替换 NaN,类似于您现在所做的:

arr[np.isnan(arr)] = -9999

作为在 python 中执行此操作的替代方法,您还可以使用 CDO 从命令行在一行中执行此操作:

cdo setmissval,-9999 in.nc out.nc

这会将所有缺失值更改为 -9999,并将文件 out.nc

中的 _FillValue 元数据设置为 -9999