cfgrib 无法识别数据变量

如何解决cfgrib 无法识别数据变量

免责声明:我是 Python 和气候数据集的初学者。我尽我最大的努力在网上搜索以找到一个没有运气的解决方案。我希望我提供了足够的信息!

数据来源:http://edc.occ-data.org/nexrad/mosaic/#data-updates

  • 使用 'MRMS_PrecipRate_00.00_20010101-120000.grib2' 这是 2001 数据集中的第一个文件

问题:我知道在 grib 文件中的“PrecipRate”属性无法识别,导致数据值为 na。我使用 pygrib 库确认了这些数据存在,但我需要它与 cgrib 一起使用,以便我可以使用“open_mfdataset”函数

import xarray as xr

ds = xr.open_dataset('MRMS_PrecipRate_00.00_20010101-120000.grib2',engine = 'cfgrib')

print(ds)

<xarray.Dataset>
Dimensions:     (latitude: 3500,longitude: 7000)
Coordinates:
    time        datetime64[ns] 2001-01-01T12:00:00
    step        timedelta64[ns] 00:00:00
    surface     float64 0.0
  * latitude    (latitude) float64 54.99 54.98 54.98 54.97 ... 20.03 20.02 20.01
  * longitude   (longitude) float64 230.0 230.0 230.0 ... 300.0 300.0 300.0
    valid_time  datetime64[ns] 2001-01-01T12:00:00
Data variables:
    unkNown     (latitude,longitude) float32 ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             161
    GRIB_centreDescription:  161
    GRIB_subCentre:          0
    Conventions:             CF-1.7
    institution:             161
    history:                 2021-05-04T13:11 GRIB to CDM+CF via cfgrib-0.9.9...

print(ds['unkNown'].values)

[[nan nan nan ... nan nan nan]
 [nan nan nan ... nan nan nan]
 [nan nan nan ... nan nan nan]
 ...
 [nan nan nan ... nan nan nan]
 [nan nan nan ... nan nan nan]
 [nan nan nan ... nan nan nan]]

只是为了表明数据确实在那里:

from metpy.units import units
import pygrib
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

grbs = pygrib.open('MRMS_PrecipRate_00.00_20010101-120000.grib2')
grb = grbs[1]

prcp = grb.values
prcp = units('mm/hr') * prcp 

# plt.imshow(prcp.to('in/hr'))
# plt.colorbar()

lats,lons = grb.latlons()

map_crs = ccrs.LAmbertConformal(central_longitude=-100,central_latitude = 35,standard_parallels=(30,60))

data_crs = ccrs.PlateCarree()


fig = plt.figure(1,figsize=(14,12))
ax = plt.subplot(projection = map_crs)

fig.subplots_adjust(hspace=0,wspace=0,top=0.925,left=0.1)

im = ax.contourf(lons,lats,prcp.to('in/hr'),transform=data_crs,cmap = 'Greens')


ax.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax.add_feature(cfeature.STATES.with_scale('50m'))

cb=plt.colorbar(im,shrink = 0.7,label='precipitation (in/hr)')

ax.set_extent([-85,-74,34,40.5],data_crs)

plt.show()

plot

解决方法

这是处理 grib 数据的常见故障。提取 grib 数据需要 grib 表。在这些表中,参数标识符被解释并映射到它们的名称。

因此,您需要做的是与 grib 文件的发布者/提供者联系并索取相应的 grib 表。我猜 pygrib 使用公共 ncep grib 表。

另外,我建议将 xarray 与 cfgrib 结合使用。它基于 ECMWF 强大的 ECCODES 库。在这里,您必须为 grib 表的存储位置设置一个额外的 ECCODES_DEFINTION_PATH。 也许 eccodes 默认包含正确的 grib 表。否则,请与 grib 文件提供商联系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?