Xarray(从grib文件)到数据集

2024-03-29 12:49:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份grib文件,其中包含1989年至2018年的月降水量和温度(摘自ERA5土地)

我需要以数据集格式提供这些数据,数据集有6列:经度、纬度、grib文件中单元/点的ID、日期、温度和降水量

我首先使用cfgrib导入了该文件。以下是导入后包含扩展数据列表的内容:

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阵列,但我不明白为什么

我怎样才能从中获得所需的数据集

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


Tags: 数据fortimerangemediumnsweathereuropean
1条回答
网友
1楼 · 发布于 2024-03-29 12:49:29

这里是经过一点尝试和错误后的答案(仅将结果放入tp变量,但t2m的结果类似)

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()

相关问题 更多 >