Python:使用netCDF4替换netcdf文件中的值

use*_*827 4 python netcdf

我有一个netcdf文件,其中有几个值<0.我想用一个值(比如-1)替换所有值.我如何使用netCDF4做到这一点?我在这样的文件中阅读:

import netCDF4

dset      = netCDF4.Dataset('test.nc')
dset[dset.variables['var'] < 0] = -1
Run Code Online (Sandbox Code Playgroud)

jha*_*man 9

如果要将数据保留在netCDF变量对象中,这应该有效:

import netCDF4

dset = netCDF4.Dataset('test.nc')

dset['var'][:][dset['var'][:] < 0] = -1

dset.close() # if you want to write the variable back to disk
Run Code Online (Sandbox Code Playgroud)

如果您不想写回磁盘,请继续执行numpy数组并切片/分配给它:

data = dset['sea_ice_cover'][:]  # data is a numpy array
data[data < 0] = -1
Run Code Online (Sandbox Code Playgroud)


小智 8

对我来说,之前的答案不起作用,我用以下方法解决了:

dset = netCDF4.Dataset('test.nc','r+')
dset.variables['var'][:]
... your changes ...
dset.close() 
Run Code Online (Sandbox Code Playgroud)


Adr*_*ins 5

解决方案1:Python xarray

此解决方案使用 xarray 读取和写入 netcdf 文件,以及包的函数有条件地重置值。

import xarray as xr
ds=xr.open_dataset('test.nc')
ds['var']=xr.where((ds['var']<0),-1,ds['var'])
ds.to_netcdf('modified_test.nc') # rewrite to netcdf
Run Code Online (Sandbox Code Playgroud)

解决方案 2:从命令行执行 NCO

我知道 OP 想要一个 python 解决方案,但如果有人想从命令行快速执行此任务,还有一种方法可以使用 nco 来完成此任务:

ncap2 -s 'where(x<0.) x=-1;' input.nc -O output.nc
Run Code Online (Sandbox Code Playgroud)

根据这篇文章:将低于阈值的值设置为 netcdf 文件中的阈值

解决方案 3:从命令行进行 CDO

cdo 还具有表达式功能,允许您从命令行以一行方式执行此操作。

cdo -expr,'var = ((var < 0)) ? -1 : var' infile.nc outfile.nc
Run Code Online (Sandbox Code Playgroud)

python 中有一个cdo包,它允许您直接在 python 中使用此功能,而无需求助于sys.