繁体   English   中英

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

[英]replace Nans with -9999 in existing netcdf file with Python

我有一个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文件,我需要做什么?

你不能使用== 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))

哪个回报:

[假真假]

您可以使用它来替换NaN,类似于您现在正在执行的操作:

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

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

cdo setmissval,-9999 in.nc out.nc

这会将所有缺失值更改为-9999,并在文件out.nc中将_FillValue元数据设置为-9999

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM