在python中读取NetCDF文件

时间:2019-04-20 20:54:44

标签: python netcdf4

我正在尝试从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

2 个答案:

答案 0 :(得分:0)

编辑:

此文件具有三个独立变量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/

  

自变量(网格)
  时间
  网格:/ T(自1960-01-01以来的月份)由1.0 N = 373 pts(1979年3月)到(2010年3月):grid
  经度
  网格:/ X(无单位)以1.0 N = 191 pts排序(1.0)至(191.0):grid
  纬度
  网格:/ Y(无单位)以1.0 N = 139 pts:grid

排序(1.0)至(139.0)

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

但是,我也没有在唯一因变量dust_pm25_sconc10_mon中找到任何数据-它为空。

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

仅描述一项就更有希望:

  

自变量(网格)
  时间(时间)
  网格:/ T(自2009-01-02 00:00开始的天数)由(0.130 N = 3640 pts)排序(0130-0430 2009年1月2日)至(2230 2010年4月1日-0130 2010年4月2日):grid
  经度
  网格:/ X(degree_east)由0.625 N = 120 pts排序(19.6875W)至(54.6875E):grid
  纬度
  网格:/ Y(degree_north)由(0.6125 N = 64 pts:grid

排序(0.3125N)至(39.6875N)

其因变量dust_pm25_sconc10也不为空。


我确实试图在您提到的网站上找到此文件,但这是徒劳的imo。因此,在不知道的情况下,我不得不猜测:

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

有关此概念的更多信息,请参阅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/

答案 1 :(得分:0)

您在对SpghttCd响应的评论中链接的示例文件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。

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

SpghttCd关于缩放和偏移的注释在这里不适用,因为第二个优质文件中的经度和纬度具有实际的lon和lat值。