用Python在现有的netcdf文件中用-9999替换Nans

时间:2017-07-10 03:59:33

标签: python nan netcdf

我有一个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文件?

2 个答案:

答案 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