我有一个包含1989-2018年月降水量和气温的grib文件(摘自ERA5-Land)。
我需要那些数据集格式的6列:经度、纬度、网格文件中单元格/点的ID、日期、温度和降水量。
我首先使用cfgrib导入文件。以下是在输入后包含xdata列表的内容:
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数组,但我不明白为什么。
如何从此获取所需的数据集?
这是我第一次处理这样的数据,我真的不知道该如何处理。
发布于 2021-06-16 02:36:02
这是经过一些尝试和错误后的答案(只将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()发布于 2022-02-11 01:17:47
使用两个xarray.Datasets的原因是因为两个变量被映射到不同的“超级立方体”。使用backend_kwargs = {'typeOfLevel': <level>}语法一次只能打开一个。请参阅cfgrib 这里的文档。您可能希望使用cfgrib.open_datasets,但也可以将backend_kwargs作为kwargs传递给xarray方法。
有时可以合并两个超级多维数据集中的变量,就像您似乎已经发现的那样。在更复杂的情况下,例如,当多个超立方体上有相同名称的data_vars时,您必须进行一些手动干预才能组合数据集。
https://stackoverflow.com/questions/67963199
复制相似问题