在python中读取NetCDF文件

2024-04-29 12:46:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从IRI/LDEO气候数据库(dust_pm25_sconc10_mon)读取NetCDF文件,但读取此文件时遇到问题。当我选择计算数据库的变量(经度(X)、纬度(Y)和时间(T))时,X和Y的输出是一个带有观察数的序列(例如1,2,…,139)。也就是说,经度和纬度值没有正确导出。在

有人能帮我解决这个问题吗?我已经尝试过用R、Python和Qgis来读取这个文件,在这三个文件中,X和Y的输出都是相同的。在

我的代码如下(Python)。在

非常感谢大家。在

from netCDF4 import Dataset as dt

filestr = 'dust_pm25_sconc10_mon.nc'

ncfile = dt(filestr, 'r')

print(ncfile.variables)

lat = ncfile.variables['Y'][:]
lat

lon = ncfile.variables['X'][:]
lon

time = ncfile.variables['T'][:]
time

Tags: 文件数据库timedtvariableslonlatmon
2条回答

编辑:

这个文件有三个自变量,X,Y和T。X和Y的值故意从1到len(X)和len(Y)。在

查看文件说明: http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.dust_mon_avg/.dust_pm25_sconc10_mon/

Independent Variables (Grids)
Time
grid: /T (months since 1960-01-01) ordered (Mar 1979) to (Mar 2010) by 1.0 N= 373 pts :grid
Longitude
grid: /X (unitless) ordered (1.0) to (191.0) by 1.0 N= 191 pts :grid
Latitude
grid: /Y (unitless) ordered (1.0) to (139.0) by 1.0 N= 139 pts :grid

当然,这可能对经度有意义,但对于纬度来说,这是无稽之谈。不幸的是,我没有发现任何提示这个数据集应该描述这个星球上的哪个区域。在

然而,我也没有在它唯一的因变量dust_pm25_sconc10_mon中找到任何数据,它是空的。在

PS:例如:
这里的数据集 http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.RegDustModelProjected/.dust_pm25_sconc10/datafiles.html
看起来更合理。。。在

仅此描述就更有希望:

Independent Variables (Grids)
Time (time)
grid: /T (days since 2009-01-02 00:00) ordered (0130-0430 2 Jan 2009) to (2230 1 Apr 2010 - 0130 2 Apr 2010) by 0.125 N= 3640 pts :grid
Longitude
grid: /X (degree_east) ordered (19.6875W) to (54.6875E) by 0.625 N= 120 pts :grid
Latitude
grid: /Y (degree_north) ordered (0.3125N) to (39.6875N) by 0.625 N= 64 pts :grid

其因变量dust_pm25_sconc10也不为空。在


我真的想在你提到的网站上找到这个文件,但是在我看来是徒劳的。所以在不知道的情况下,我不得不猜测:

netcdf文件提供了通过缩放和移动任何变量的值来节省数据空间的可能性,以便它们可以存储为int,而不是float
您可以简单地检查是否存在除0以外的add_offset和除1以外的scale_factor属性。在

有关此概念的更多信息,请参阅https://www.unidata.ucar.edu/software/netcdf/workshops/2010/bestpractices/Packing.html。在

尽管上面链接中的信息表明netcdf的java接口确实自动应用了这些属性,netcdf4-python库没有。因此,如果你想继续使用这个包,你必须重新缩放和偏移数据,使之回到原来的值。在

不过,您也可以考虑试用xarray,这是一个实现netcdf文件n维数据结构的库,据我所知,这个库根据上述规则自动缩放和偏移。
http://xarray.pydata.org/en/stable/

您在sphttcd响应的注释中链接的位于http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.dust_mon_avg/.dust_pm25_sconc10_mon/datafiles.html的示例文件格式不正确。首先,X和Y数组没有适合于此类维度的units属性,而是都有值“units”。如前所述,数组中的值无论如何都不“看起来”有效。此外,该文件中dust_pm25_sconc10_mon数组中的值似乎都是NaN。在

另一方面,sphttcd引用的http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.RegDustModelProjected/.dust_pm25_sconc10/datafiles.html处的示例数据集具有良好的单位属性信息(“分别为“东度”和“北度”)。此外,X和Y数组中的实际值看起来不错。我在那个数据集中绘制了dust_pm25_sconc10变量的图(使用Panoply),并看到了映射到相应区域上的数据。在

SpghttCd关于缩放和偏移的注释在这里不适用,因为在那一秒,好的文件有实际的lon和lat值。在

相关问题 更多 >