首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :使用netCDF4替换netcdf文件中的值

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

Stack Overflow用户
提问于 2015-08-06 20:41:35
回答 4查看 16.1K关注 0票数 9

我有一个netcdf文件,它有几个值< 0。我想用一个单一的值(比如说-1)来替换它们。我如何使用netCDF4实现这一目标?我在文件里读到这样的内容:

代码语言:javascript
复制
import netCDF4

dset      = netCDF4.Dataset('test.nc')
dset[dset.variables['var'] < 0] = -1
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-06 23:14:13

如果希望将数据保存在netCDF变量对象中,则应该可以:

代码语言:javascript
复制
import netCDF4

dset = netCDF4.Dataset('test.nc', 'r+')

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

dset.close() # if you want to write the variable back to disk

如果您不想写回磁盘,那么继续获取numpy数组并将其切片/分配给它:

代码语言:javascript
复制
data = dset['sea_ice_cover'][:]  # data is a numpy array
data[data < 0] = -1
票数 14
EN

Stack Overflow用户

发布于 2017-01-02 20:29:20

对我来说,前面的答案行不通,我用以下方法解决了这个问题:

代码语言:javascript
复制
dset = netCDF4.Dataset('test.nc','r+')
dset.variables['var'][:]
... your changes ...
dset.close() 
票数 9
EN

Stack Overflow用户

发布于 2019-06-09 14:19:15

解决方案1: Python

此解决方案使用xarray读取和写入netcdf文件,并使用包的函数http://xarray.pydata.org/en/stable/generated/xarray.where.html有条件地重置值。

代码语言:javascript
复制
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

解决方案2:来自命令行的NCO

我知道OP需要一个python解决方案,但是如果有人只想通过命令行快速执行这个任务,还有一种使用nco的方法:

代码语言:javascript
复制
ncap2 -s 'where(x<0.) x=-1;' input.nc -O output.nc

根据这篇文章:setting values below a threshold to the threshold in a netcdf file

解决方案3:命令行中的CDO

cdo还具有表达式功能,允许您在命令行的一行程序中执行此操作。

代码语言:javascript
复制
cdo -expr,'var = ((var < 0)) ? -1 : var' infile.nc outfile.nc

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31865410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档