Python读取Grib数据:xarray与cfgrib安装及报错处理详解

洛溪
洛溪
发布时间:2026-10-14| 5人浏览过
原创

本文详细介绍在Python中通过xarray搭配cfgrib库读取Grib数据的完整流程。重点讲解如何在独立conda环境中避免依赖冲突,解决Windows/Linux/MacOS跨平台兼容问题,并针对读取多typeOfLevel文件时常见的DatasetBuildError报错,提供基于filter_by_keys的具体代码修复方案。

环境准备与不推荐方案分析

在尝试安装任何用于处理Grib数据的Python库之前,强烈建议创建一个全新的虚拟环境进行安装。在base环境中直接安装往往会导致各种依赖冲突和报错。关于如何创建新环境的具体方法,可参考之前的总结或网络上的其他教程。

不推荐的方法

首先介绍两种不推荐的方案。第一种是pygrib库,它依赖于python2.4+、numpy、pyproj、Jasper以及GRIB_API。由于GRIB_API已于2020年6月30日正式被ecCodes取代,且该库主要依赖Linux或MacOS系统,因此目前不再推荐使用。第二种是GDAL,虽然它在Windows下安装相对简单,但需要借助wgrib2工具来查看Grib变量所在的通道,操作较为繁琐,故也不推荐。

推荐的解决方案

xarray与cfgrib安装步骤详解

推荐使用xarray搭配cfgrib库的组合方案。该方案的优势在于支持Linux、Windows和MacOS系统,且安装过程相对简单。强烈建议在所有所需库安装前,先创建一个独立的虚拟环境以确保依赖隔离。以下是具体的安装步骤:

第一步,创建新的conda环境。执行以下命令创建一个名为cfgrib_env的环境,并指定Python版本为3.7.0: conda creat -n cfgrib_env python=3.7.0

第二步,启动刚才创建的虚拟环境。在命令行中输入以下命令激活环境: source activate cfgrib_env

第三步,在激活的环境中安装spyder、xarray、eccodes、cfgrib以及其他必要的依赖库。安装方式可以选择pip或conda。需要注意的是,eccodes通常无需额外配置路径(尽管部分教程可能提及需要配置)。

第四步,在刚刚安装好的新环境中启动Spyder编辑器。如果在base环境或其他环境中启动Spyder,将无法正确调用新环境中的库,因此必须切换到安装路径并执行: ~/anaconda3/envs/cfgrib_env/bin$ ./spyder

第五步,编写读取Grib数据的Python代码。

代码实现与常见报错处理


import xarray as xr
import cfgrib

ds = xr.open_dataset('/1.grib2',engine='cfgrib')

在执行代码时,可能会遇到如下错误提示:


DatasetBuildError: multiple values for unique key, try re-open the file with one of:
  filter_by_keys={'typeOfLevel': 'unknown'}
  filter_by_keys={'typeOfLevel': 'surface'}
  filter_by_keys={'typeOfLevel': 'isobaricInhPa'}
  filter_by_keys={'typeOfLevel': 'meanSea'}
  filter_by_keys={'typeOfLevel': 'depthBelowLandLayer'}
  filter_by_keys={'typeOfLevel': 'heightAboveGround'}
  filter_by_keys={'typeOfLevel': 'heightAboveGroundLayer'}
  filter_by_keys={'typeOfLevel': 'tropopause'}
  filter_by_keys={'typeOfLevel': 'maxWind'}
  filter_by_keys={'typeOfLevel': 'heightAboveSea'}
  filter_by_keys={'typeOfLevel': 'isothermZero'}
  filter_by_keys={'typeOfLevel': 'pressureFromGroundLayer'}
  filter_by_keys={'typeOfLevel': 'sigmaLayer'}
  filter_by_keys={'typeOfLevel': 'sigma'}
  filter_by_keys={'typeOfLevel': 'potentialVorticity'}

遇到此错误无需惊慌。这是因为当前的cfgrib库无法直接同时读取包含多个typeOfLevel(层级类型)的文件。解决方法是根据报错提示,筛选出我们所需的具体数据层级。在原程序基础上,需要添加相应的筛选参数,具体代码如下:


ds = xr.open_dataset('/1.grib2',engine='cfgrib',backend_kwargs=
{'filter_by_keys':
{
'typeOfLevel': 'surface'
}
}
)

筛选后的数据变量可通过ds.变量名的方式访问。

经过多日的调试与折腾,最终成功解决了问题,感觉轻松许多。

总结

至此,关于Python安装及读取Grib库的总结介绍完毕。如需了解更多相关内容,建议搜索本站过往文章或继续浏览后续文章。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。