基于Python Xarray的Grid格式文件处理

前言

Xarray是专门为科学计算开发的用于处理多维数组的开源Python程序包,通过对多维数组进行标记,提供更加方便的操作方式,这一点和地球科学中的NetCDF数据格式非常相似。

1、安装

首先安装xarray和cfgrib等所需要的库,命令如下:

conda install -c conda-forge xarray cfgrib eccodes

2、数据处理

Xarray中提供了不同的后端,可用于处理Grib格式数据。以下以cfgrib后端为例处理GFS全球预报的Grib格式文件:

import xarray as xr

fn = 'gfs.t00z.pgrb2.0p25.f000'

rh = xr.open_dataset(fn, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel': 'isobaricInhPa', 'paramId=157'}})
pre = rh['isobaricInhPa'].data

gh = xr.open_dataset(fn, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel': 'isobaricInhPa', 'paramId':156}})

gh['gh'].sel(isobaricInhPa=pre)

注意:使用cfgrib后端处理GFS全球预报的grib格式文件时,由于部分变量的维度大小不同,一次读取多个变量可能会出现问题。比如在GFS的grib格式数据中,位势高度和温度的isobaricInhPa维度大小为33,而相对湿度的isobaricInhPa维度大小为31。使用如下命令读取时会出现问题:仅提取部分变量,然后给出跳过变量的提示。读取GFS的grib数据时,仅读取位势高度和温度变量。

data = xr.open_dataset(fn, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel':'isobaricInhPa'}})

正是由于GFS的grib格式文件中维度类型太多,所以如果直接读取会出现问题。因此需要使用backend_kwargs参数进行筛选。如果不知道该提供什么参数进行筛选,可以先执行如下语句:

data = xr.open_dataset(fn, engine='cfgrib')

会触发DatasetBuildError错误,并给出可能的筛选关键词。

除了直接提取变量所有层之外,也可以单独提取某一层,比如:

data = xr.open_dataset(fn, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel':'isobaricInhPa', 'level':850}})

提取单层不会出现上述问题,只要是相同维度类型的变量可以一次性全部提取,并返回xarray.Dataset类型数据,然后借助xarray的强大功能可以实现很方便的数组操作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾城一少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值