首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xarray (从grib文件)到dataset

Xarray (从grib文件)到dataset
EN

Stack Overflow用户
提问于 2021-06-13 22:53:01
回答 2查看 2K关注 0票数 2

我有一个包含1989-2018年月降水量和气温的grib文件(摘自ERA5-Land)。

我需要那些数据集格式的6列:经度、纬度、网格文件中单元格/点的ID、日期、温度和降水量。

我首先使用cfgrib导入文件。以下是在输入后包含xdata列表的内容:

代码语言:javascript
复制
import cfgrib

grib_data = cfgrib.open_datasets('\era5land_extract.grib')

grib_data
Out[6]: 
[<xarray.Dataset>
 Dimensions:     (latitude: 781, longitude: 761, time: 372)
 Coordinates:
     number      int32 0
   * time        (time) datetime64[ns] 1989-01-01 1989-02-01 ... 2019-12-01
     step        timedelta64[ns] 1 days
     surface     float64 0.0
   * latitude    (latitude) float64 42.0 41.9 41.8 41.7 ... -35.8 -35.9 -36.0
   * longitude   (longitude) float64 -21.0 -20.9 -20.8 -20.7 ... 54.8 54.9 55.0
     valid_time  (time) datetime64[ns] ...
 Data variables:
     t2m         (time, latitude, longitude) float32 ...
 Attributes:
     GRIB_edition:            1
     GRIB_centre:             ecmf
     GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts
     GRIB_subCentre:          0
     Conventions:             CF-1.7
     institution:             European Centre for Medium-Range Weather Forecasts,
 <xarray.Dataset>
 Dimensions:     (latitude: 781, longitude: 761, time: 156)
 Coordinates:
     number      int32 0
   * time        (time) datetime64[ns] 1989-01-01 1989-02-01 ... 2001-12-01
     step        timedelta64[ns] 1 days
     surface     float64 0.0
   * latitude    (latitude) float64 42.0 41.9 41.8 41.7 ... -35.8 -35.9 -36.0
   * longitude   (longitude) float64 -21.0 -20.9 -20.8 -20.7 ... 54.8 54.9 55.0
     valid_time  (time) datetime64[ns] ...
 Data variables:
     tp          (time, latitude, longitude) float32 ...
 Attributes:
     GRIB_edition:            1
     GRIB_centre:             ecmf
     GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts
     GRIB_subCentre:          0
     Conventions:             CF-1.7
     institution:             European Centre for Medium-Range Weather Forecasts,
 <xarray.Dataset>
 Dimensions:     (latitude: 781, longitude: 761, time: 216)
 Coordinates:
     number      int32 0
   * time        (time) datetime64[ns] 2002-01-01 2002-02-01 ... 2019-12-01
     step        timedelta64[ns] 1 days
     surface     float64 0.0
   * latitude    (latitude) float64 42.0 41.9 41.8 41.7 ... -35.8 -35.9 -36.0
   * longitude   (longitude) float64 -21.0 -20.9 -20.8 -20.7 ... 54.8 54.9 55.0
     valid_time  (time) datetime64[ns] ...
 Data variables:
     tp          (time, latitude, longitude) float32 ...
 Attributes:
     GRIB_edition:            1
     GRIB_centre:             ecmf
     GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts
     GRIB_subCentre:          0
     Conventions:             CF-1.7
     institution:             European Centre for Medium-Range Weather Forecasts]

因此,温度变量称为"t2m“,而降水变量称为"tp”。温度变量被分成两个x数组,但我不明白为什么。

如何从此获取所需的数据集?

这是我第一次处理这样的数据,我真的不知道该如何处理。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-16 02:36:02

这是经过一些尝试和错误后的答案(只将tp变量的结果放在一起,但对于t2m来说类似)

代码语言:javascript
复制
import cfgrib
import xarray as xr


# Import data
grib_data = cfgrib.open_datasets('\era5land_extract.grib')


# Merge both tp arrays into one on the time dimension
grib_precip = xr.merge([grib_data[1], grib_data[2]])


# Aggregate data by year
grib_precip_year = grib_precip.resample(time="Y", skipna=True).mean()


# Data from xarray to pandas
grib_precip_pd = grib_precip_year.to_dataframe()
票数 2
EN

Stack Overflow用户

发布于 2022-02-11 01:17:47

使用两个xarray.Datasets的原因是因为两个变量被映射到不同的“超级立方体”。使用backend_kwargs = {'typeOfLevel': <level>}语法一次只能打开一个。请参阅cfgrib 这里的文档。您可能希望使用cfgrib.open_datasets,但也可以将backend_kwargs作为kwargs传递给xarray方法。

有时可以合并两个超级多维数据集中的变量,就像您似乎已经发现的那样。在更复杂的情况下,例如,当多个超立方体上有相同名称的data_vars时,您必须进行一些手动干预才能组合数据集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67963199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档