我正在尝试将netCDF4软件包与python一起使用。我想做一些我认为应该简单明了的事情,但是我无法使其工作,也找不到任何文档。我有一个列表,我只想将列表存储在netCDF4.Variable对象中。我以为这段代码会将“ newlist”存储在netCDF4.Variable对象“ x_data”中,该对象是数据集对象“ netdata”的组成部分:
netdata.variables['x_data'][:]=numpy.array(newlist)
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。我收到错误消息:
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我已经导入了netCDF4和numpy。顺便说一句,如果我不将newlist转换为numpy数组,就会遇到相同的错误。
当然,有一种方法可以做到这一点。有人知道吗?谢谢。
附录:这个简单的更改使我摆脱了错误消息:
netdata.variables['x_data']=newlist
Run Code Online (Sandbox Code Playgroud)
但是我仍然没有走出困境。数据肯定存储在netdata.variables ['x_data']中,但是随后我关闭netdata并退出python,然后检查netCDF输出,而数据就不存在了。有任何想法吗?再次感谢。
使用 R,我试图打开单个文件夹(例如 20 个文件)中的所有 netcdf 文件,读取单个变量,并创建一个结合所有文件值的单个 data.frame。我一直在使用 RnetCDF 来读取 netcdf 文件。对于单个文件,我使用以下命令读取变量:
library('RNetCDF')
nc = open.nc('file.nc')
lw = var.get.nc(nc,'LWdown',start=c(414,315,1),count=c(1,1,240))
Run Code Online (Sandbox Code Playgroud)
其中 414 和 315 是我想要提取的值的经度和纬度,240 是时间步数。
我找到了这个线程,它解释了如何打开多个文件。在此之后,我设法使用以下方法打开文件:
filenames= list.files('/MY_FOLDER/',pattern='*.nc',full.names=TRUE)
ldf = lapply(filenames,open.nc)
Run Code Online (Sandbox Code Playgroud)
但现在我被困住了。我试过
var1= lapply(ldf, var.get.nc(ldf,'LWdown',start=c(414,315,1),count=c(1,1,240)))
Run Code Online (Sandbox Code Playgroud)
但它不起作用。增加的复杂性是每个 nc 文件都有不同数量的时间步长。所以我有两个问题:
1:如何打开所有文件,读取每个文件中的变量并将所有值合并到一个数据框中?2:如何将最后一个维度设置count为所有文件都不同?
我在将数据从GrADS导出到.csv文件时遇到了真正的困难,尽管它应该非常简单.该文件来自与亚洲降雨有关的APHRODITE项目.基本上我可以使用以下方法将此文件读入GrADS:
open d:/aphro/aphro.ctl
Run Code Online (Sandbox Code Playgroud)
它告诉我:
Data file d:/aphro/APHRO_MA_025deg_V1101R2.%y4 is open as file 1
Lon set to 60.125 149.875
Lat set to -14.875 54.875
Lev set to 1 1
Time values set: 1961:1:1:0 1961:1:1:0
E set to 1 1
Run Code Online (Sandbox Code Playgroud)
如果我执行:
q ctlinfo
Run Code Online (Sandbox Code Playgroud)
它还告诉我,我有三个变量:
precip 1 0 daily precipitation analysis
rstn 1 0 ratio of 0.05 degree grids with station
flag 1 0 ratio of 0.05 degree grids with snow
Run Code Online (Sandbox Code Playgroud)
好的,现在我想做的就是在.csv文件(或.txt)文件中生成一个列表,其中包含以下信息:
Precipitation Lon Lat Time(date)
Run Code Online (Sandbox Code Playgroud)
这听起来很容易,但我无法做到.一种方法是使用:
fprintf precip d:/output.csv %g 1
Run Code Online (Sandbox Code Playgroud)
这给了我一个.csv文件,其中包含当天在一个长列中的整个数据(这就是我想要的).我也可以为lon和lat在不同的文件中做同样的事情并将它们组合起来.问题是输出文件需要很长时间 - …
我对python和编程都很陌生,都是自学成才.我去年年底开始了一个新职位,要求我创建和维护大型科学数据集.一个很大的障碍是学习在Windows上为64位python 2.7安装pyhdf和netcdf4模块.这是怎么做的.
我有从此处获得的netCDF文件,名称为precip.mon.total.v6.nc。我正在ncdfR中使用软件包打开和分析文件。
new <- open.ncdf("precip.mon.total.v6.nc")
> new
[1] "file precip.mon.total.v6.nc has 4 dimensions:"
[1] "lat Size: 360"
[1] "lon Size: 720"
[1] "nbnds Size: 2"
[1] "time Size: 1320"
[1] "------------------------"
[1] "file precip.mon.total.v6.nc has 1 variables:"
[1] "float precip[lon,lat,time] Longname:GPCC Monthly total of precipitation Missval:-9.96920996838687e+36"
Run Code Online (Sandbox Code Playgroud)
但是当我提取变量时,我得到了错误
> get.var.ncdf(new, "precip")
Error: cannot allocate vector of size 2.5 Gb
In addition: Warning messages:
1: In double(totvarsize) :
Reached total allocation of 2047Mb: see help(memory.size)
2: In …Run Code Online (Sandbox Code Playgroud) 我需要将大(+ 15GB)NetCDF文件读入一个程序,该程序包含一个3D变量(等时间作为记录维度,数据是纬度经度).
我正在以3级嵌套循环处理数据(如果NetCDF通过某个标准,则检查NetCDF的每个块.例如;
from netCDF4 import Dataset
import numpy as np
File = Dataset('Somebigfile.nc', 'r')
Data = File.variables['Wind'][:]
Getdimensions = np.shape(Data)
Time = Getdimensions[0]
Latdim = Getdimensions[1]
Longdim = Getdimensions[2]
for t in range(0,Time):
for i in range(0,Latdim):
for j in range(0,Longdim):
if Data[t,i,j] > Somethreshold:
#Do something
Run Code Online (Sandbox Code Playgroud)
无论如何,我一次可以在NetCDF文件中读取一次记录吗?大大减少内存使用量.任何帮助非常感谢.
我知道NCO运算符,但在使用脚本之前不希望使用这些方法来分解文件.
是否有 python netCDF4 命令/示例来更改 netCDF 文件中的全局元数据 _FillValue?我曾尝试替换 netCDF 文件中的所有 -ve 值,但直到设置 _FillValue 属性时,这不起作用
我正在尝试使用Python将netCDF文件转换为CSV或文本文件。我已经阅读了这篇文章,但仍然缺少一个步骤(我是Python的新手)。它是一个包含纬度,经度,时间和降水量数据的数据集。
到目前为止,这是我的代码:
import netCDF4
import pandas as pd
precip_nc_file = 'file_path'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]
Run Code Online (Sandbox Code Playgroud)
我不知道如何从这里开始,尽管我知道这是用熊猫创建数据框的问题。
打开我的netcdf文件时出现此错误。该代码之前工作。 我该如何解决 ?
追溯(最近一次通话):
文件“”,行1,在...
collect_vgt中第71行的文件“ file.py”返回xr.open_dataset(filename)
在open_dataset autoclose = autoclose中的文件“ /.../lib/python3.6/site-packages/xarray/backends/api.py”,行286
在打开的ds = opener()中,文件“ /.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py”,第275行
在_open_netcdf4_group ds = nc4.Dataset中的文件“ /.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py”,第199行ds = nc4.Dataset(文件名,mode = mode,** kwargs)
netCDF4._netCDF4.Dataset中的文件“ netCDF4 / _netCDF4.pyx”,行2015。在里面
netCDF4._netCDF4._ensure_nc_success中的文件“ netCDF4 / _netCDF4.pyx”,行1636
OSError:[Errno -101] NetCDF:HDF错误:b'file.nc'
当我尝试使用h5py打开相同的netcdf文件时,出现此错误:
OSError:无法打开文件(此文件系统上的文件锁定已禁用(使用HDF5_USE_FILE_LOCKING环境变量进行覆盖),errno = 38,错误消息='...')
我有一个 netCDF4 数据文件,其中时间变量存储为浮点数(netCDF: 'f8', numpy: float64),我需要将其更改为 32bit int (netCDF: 'i4', numpy: int32)。我试过在 python 中进行更改
tds.variables['time'][:] = np.int32(tds.variables['time'][:])
Run Code Online (Sandbox Code Playgroud)
但这没有用。进行此更改的最佳方法是什么?