我有一个netcdf文件,其中一个变量中包含nan。我想读取文件,然后用-9999替换nans。然后保存新的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文件?
答案 0 :(得分:3)
您无法使用== np.nan
比较。考虑这个例子:
arr = np.random.random(3)
arr[1] = np.nan
print(arr)
print(arr == np.nan)
这给出了:
阵列([0.88978822,nan,0.71066851])
[假错假]
检查NaN的正确方法是使用np.isnan
:
print(np.isnan(arr))
返回:
[False True False]
您可以使用它来替换NaN,类似于您现在正在做的事情:
arr[np.isnan(arr)] = -9999
答案 1 :(得分:-1)
作为在python中执行此操作的替代方法,您还可以使用CDO从命令行在一行中执行此操作:
cdo setmissval,-9999 in.nc out.nc
这会将所有缺失的值更改为-9999,并在文件out.nc中将_FillValue元数据设置为-9999