GRIB: selection using metadata

We read an example GRIB file containing 18 messages and load into a fieldlist.

[1]:
import earthkit.data as ekd

ds = ekd.from_source("sample", "tuv_pl.grib").to_fieldlist()
len(ds)
[1]:
18

Using sel

With sel() we can select a subset of messages.

[2]:
ds1 = ds.sel({"vertical.level": 500})
ds1.ls()
[2]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll
1 u 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll
2 v 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll

Lists are accepted:

[3]:
ds1 = ds.sel({"vertical.level": [500, 850]})
ds1.ls()
[3]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 850 pressure 0 regular_ll
1 u 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 850 pressure 0 regular_ll
2 v 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 850 pressure 0 regular_ll
3 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll
4 u 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll
5 v 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll

Slices can define closed intervals, so they are treated as inclusive of both the start and stop values, unlike normal Python indexing:

[4]:
ds1 = ds.sel({"vertical.level": slice(500, 850), "parameter.variable": "t"})
ds1.ls()
[4]:
parameter.variable time.valid_datetime time.base_datetime time.step vertical.level vertical.level_type ensemble.member geography.grid_type
0 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 850 pressure 0 regular_ll
1 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 700 pressure 0 regular_ll
2 t 2018-08-01 12:00:00 2018-08-01 12:00:00 0 days 500 pressure 0 regular_ll