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

2024-06-28 20:56:23 发布

您现在位置: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.最大值或者np.min.最小值对于这个变量,我仍然得到nan而不是-9999。我需要做些什么来替换这个netcdf文件中的nan并用替换的nan的更改重写一个新的netcdf文件?在


Tags: 文件fromimportnumpyasnpnetcdfvariables
2条回答

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

^{pr2}$

返回:

[False True False]

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

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

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

cdo setmissval,-9999 in.nc out.nc

这将把所有缺少的值更改为-9999,并将文件中的\u FillValue元数据设置为-9999输出.nc在

相关问题 更多 >