Back to top
NetCDF: working with fieldlists
We read a NetCDF file containing 3 variables on pressure levels on a 2D latitude-longitude grid. First we ensure the example file is available.
Our NetCDF data is represented as a FieldList consisting of NetCDFFields. Field in this context means a 2D geographical coverage (horizontal slices).
Iteration
We can itearte through the fields (we use the first 3 fields for simplicity):
Field(t, 2018-08-01 12:00:00, 2018-08-01 12:00:00, 0:00:00, 1000, pressure, 0, None)
Field(t, 2018-08-01 12:00:00, 2018-08-01 12:00:00, 0:00:00, 850, pressure, 0, None)
Field(t, 2018-08-01 12:00:00, 2018-08-01 12:00:00, 0:00:00, 700, pressure, 0, None)
Inspecting the contents
|
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 |
1000 |
pressure |
0 |
None |
| 1 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
| 2 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
700 |
pressure |
0 |
None |
| 3 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
500 |
pressure |
0 |
None |
| 4 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
400 |
pressure |
0 |
None |
| 5 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
300 |
pressure |
0 |
None |
| 6 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
1000 |
pressure |
0 |
None |
| 7 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
| 8 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
700 |
pressure |
0 |
None |
| 9 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
500 |
pressure |
0 |
None |
| 10 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
400 |
pressure |
0 |
None |
| 11 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
300 |
pressure |
0 |
None |
| 12 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
1000 |
pressure |
0 |
None |
| 13 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
| 14 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
700 |
pressure |
0 |
None |
| 15 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
500 |
pressure |
0 |
None |
| 16 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
400 |
pressure |
0 |
None |
| 17 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
300 |
pressure |
0 |
None |
Slicing
Standard Python slicing is available.
|
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 |
None |
| 1 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
700 |
pressure |
0 |
None |
Getting data values
Using values
The values property always returns a flat array per field:
array([272.56486405, 272.56486405, 272.56486405, 272.56486405])
When called on the whole fieldlist values returns a 2D array:
Using to_numpy()
With to_numpy() the field shape is set on the array:
Selection
Selection by metadata is always creating a “view”, no copying of data is involved.
|
parameter.variable |
time.valid_datetime |
time.base_datetime |
time.step |
vertical.level |
vertical.level_type |
ensemble.member |
geography.grid_type |
| 0 |
u |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
| 1 |
v |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
|
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 |
1000 |
pressure |
0 |
None |
| 1 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
850 |
pressure |
0 |
None |
| 2 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
700 |
pressure |
0 |
None |
| 3 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
500 |
pressure |
0 |
None |
| 4 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
400 |
pressure |
0 |
None |
| 5 |
t |
2018-08-01 12:00:00 |
2018-08-01 12:00:00 |
0 days |
300 |
pressure |
0 |
None |
Xarray
Xarray conversion does not involve disk writing.
<xarray.Dataset> Size: 12kB
Dimensions: (time: 1, level: 6, latitude: 7, longitude: 12)
Coordinates:
* time (time) datetime64[ns] 8B 2018-08-01T12:00:00
* level (level) int32 24B 1000 850 700 500 400 300
* latitude (latitude) float32 28B 90.0 60.0 30.0 0.0 -30.0 -60.0 -90.0
* longitude (longitude) float32 48B 0.0 30.0 60.0 90.0 ... 270.0 300.0 330.0
Data variables:
t (time, level, latitude, longitude) float64 4kB dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
u (time, level, latitude, longitude) float64 4kB dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
v (time, level, latitude, longitude) float64 4kB dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
Attributes:
Conventions: CF-1.6
history: 2023-08-07 18:24:35 GMT by grib_to_netcdf-2.30.2: grib_to_n...- time: 1
- level: 6
- latitude: 7
- longitude: 12
t
(time, level, latitude, longitude)
float64
dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
- units :
- K
- long_name :
- Temperature
- standard_name :
- air_temperature
| |
Array |
Chunk |
| Bytes |
3.94 kiB |
3.94 kiB |
| Shape |
(1, 6, 7, 12) |
(1, 6, 7, 12) |
| Dask graph |
1 chunks in 2 graph layers |
| Data type |
float64 numpy.ndarray |
|
|
u
(time, level, latitude, longitude)
float64
dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
- units :
- m s**-1
- long_name :
- U component of wind
- standard_name :
- eastward_wind
| |
Array |
Chunk |
| Bytes |
3.94 kiB |
3.94 kiB |
| Shape |
(1, 6, 7, 12) |
(1, 6, 7, 12) |
| Dask graph |
1 chunks in 2 graph layers |
| Data type |
float64 numpy.ndarray |
|
|
v
(time, level, latitude, longitude)
float64
dask.array<chunksize=(1, 6, 7, 12), meta=np.ndarray>
- units :
- m s**-1
- long_name :
- V component of wind
- standard_name :
- northward_wind
| |
Array |
Chunk |
| Bytes |
3.94 kiB |
3.94 kiB |
| Shape |
(1, 6, 7, 12) |
(1, 6, 7, 12) |
| Dask graph |
1 chunks in 2 graph layers |
| Data type |
float64 numpy.ndarray |
|
|
- Conventions :
- CF-1.6
- history :
- 2023-08-07 18:24:35 GMT by grib_to_netcdf-2.30.2: grib_to_netcdf -o tuv_pl.nc tuv_pl.grib