xarray
What is xarray?
xarray is a Python package used for reading, manipulating, and writing multidimensional datasets. This makes it perfect for working with netCDF files, which is what we will be working with here.
xarray is inspired by pandas and borrows a lot of the commands used.
What is netCDF?
netCDF - network Common Data Format
- pro - can store lots of extra information about data, such as extra dimensions and metadata.
- con - can be confusing to read into programming languages due to the amount of data.
How can I install xarray?
You can install the xarray package following the instructions here: https://xarray.pydata.org/en/stable/getting-started-guide/installing.html#instructions
or by using the following conda command:
conda install -c conda-forge xarray dask netCDF4 bottleneck
Note that we are installing several packages. Dask, netCDF4, and bottleneck are all dependancies of xarray. Dependancies are other packages needed for a package to run successfully.
- dask - for parallel computing
- netCDF4 - for reading in netCDF files
- bottleneck - a series of c functions for speeding up numpy
Importing Packages
A common shortcut for xarray is xr
, so we will import xarray as xr
. We’re also going to import numpy and pandas becasue they’ll be used in later examples.
# import xarray
import xarray as xr
# import additional packages
import numpy as np
import pandas as pd
Reading in netCDFs
datasets
You can read in one file at a time using xr.open_dataset()
. We will see later how to import more than once netCDF at once.
When we read in the netCDF, we get a dataset. A dataset can have multiple variables, dimensions, coordinates, and attributes.
- Dimensions - Axis names
- Coordinates - Axis ticks
- Data variables - The data values, each with their own assigned name, metadata, and dimensions/coordinates.
- Attributes - Metadata
The following example uses a netCDF dataset downloaded from Unidata (Unidata netCDF examples). The file is tos_O1_2001-2002.nc
, the fourth file from the top in the netCDF File column of the ‘Sample files following CF conventions’ table.
Alternatively, you can download this file from the google drive folder with materials for this talk.
# Reading in data - this is a DATASET
data_set = xr.open_dataset('/Users/smurphy/Downloads/tos_O1_2001-2002.nc')
data_set
<xarray.Dataset> Dimensions: (bnds: 2, lat: 170, lon: 180, time: 24) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Dimensions without coordinates: bnds Data variables: lon_bnds (lon, bnds) float64 -0.0 2.0 2.0 4.0 ... 356.0 358.0 358.0 360.0 lat_bnds (lat, bnds) float64 -80.0 -79.0 -79.0 -78.0 ... 89.0 89.0 90.0 time_bnds (time, bnds) object 2001-01-01 00:00:00 ... 2003-01-01 00:00:00 tos (time, lat, lon) float32 ... Attributes: (12/13) title: IPSL model output prepared for IPCC Fourth Assessment SR... institution: IPSL (Institut Pierre Simon Laplace, Paris, France) source: IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96... contact: Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr project_id: IPCC Fourth Assessment table_id: Table O1 (13 November 2004) ... ... realization: 1 cmor_version: 0.96 Conventions: CF-1.0 history: YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed... references: Dufresne et al, Journal of Climate, 2015, vol XX, p 136 comment: Test drive
- bnds: 2
- lat: 170
- lon: 180
- time: 24
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- lon_bnds(lon, bnds)float64...
array([[ -0., 2.], [ 2., 4.], [ 4., 6.], ..., [354., 356.], [356., 358.], [358., 360.]])
- lat_bnds(lat, bnds)float64...
array([[-80., -79.], [-79., -78.], [-78., -77.], ..., [ 87., 88.], [ 88., 89.], [ 89., 90.]])
- time_bnds(time, bnds)object...
array([[cftime.Datetime360Day(2001, 1, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 2, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 3, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 4, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 5, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 6, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 7, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 8, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 9, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 10, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 11, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2001, 12, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 1, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 2, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 3, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 4, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 5, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 6, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 7, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 8, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 9, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 10, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 11, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 1, 0, 0, 0, 0, has_year_zero=True)], [cftime.Datetime360Day(2002, 12, 1, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2003, 1, 1, 0, 0, 0, 0, has_year_zero=True)]], dtype=object)
- tos(time, lat, lon)float32...
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
[734400 values with dtype=float32]
- title :
- IPSL model output prepared for IPCC Fourth Assessment SRES A2 experiment
- institution :
- IPSL (Institut Pierre Simon Laplace, Paris, France)
- source :
- IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v
- contact :
- Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr
- project_id :
- IPCC Fourth Assessment
- table_id :
- Table O1 (13 November 2004)
- experiment_id :
- SRES A2 experiment
- realization :
- 1
- cmor_version :
- 0.96
- Conventions :
- CF-1.0
- history :
- YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements
- references :
- Dufresne et al, Journal of Climate, 2015, vol XX, p 136
- comment :
- Test drive
# view values
data_set.values
<bound method Mapping.values of <xarray.Dataset>
Dimensions: (bnds: 2, lat: 170, lon: 180, time: 24)
Coordinates:
* lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 353.0 355.0 357.0 359.0
* lat (lat) float64 -79.5 -78.5 -77.5 -76.5 ... 86.5 87.5 88.5 89.5
* time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00
Dimensions without coordinates: bnds
Data variables:
lon_bnds (lon, bnds) float64 -0.0 2.0 2.0 4.0 ... 356.0 358.0 358.0 360.0
lat_bnds (lat, bnds) float64 -80.0 -79.0 -79.0 -78.0 ... 89.0 89.0 90.0
time_bnds (time, bnds) object 2001-01-01 00:00:00 ... 2003-01-01 00:00:00
tos (time, lat, lon) float32 ...
Attributes: (12/13)
title: IPSL model output prepared for IPCC Fourth Assessment SR...
institution: IPSL (Institut Pierre Simon Laplace, Paris, France)
source: IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96...
contact: Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr
project_id: IPCC Fourth Assessment
table_id: Table O1 (13 November 2004)
... ...
realization: 1
cmor_version: 0.96
Conventions: CF-1.0
history: YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed...
references: Dufresne et al, Journal of Climate, 2015, vol XX, p 136
comment: Test drive>
# show the dimensions
data_set.dims
Frozen(SortedKeysDict({'lon': 180, 'bnds': 2, 'lat': 170, 'time': 24}))
# show the coordinates
data_set.coords
Coordinates:
* lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0
* lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5
* time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00
# show the attributes
data_set.attrs
{'title': 'IPSL model output prepared for IPCC Fourth Assessment SRES A2 experiment',
'institution': 'IPSL (Institut Pierre Simon Laplace, Paris, France)',
'source': 'IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v',
'contact': 'Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr',
'project_id': 'IPCC Fourth Assessment',
'table_id': 'Table O1 (13 November 2004)',
'experiment_id': 'SRES A2 experiment',
'realization': 1,
'cmor_version': 0.96,
'Conventions': 'CF-1.0',
'history': 'YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements',
'references': 'Dufresne et al, Journal of Climate, 2015, vol XX, p 136',
'comment': 'Test drive'}
Dropping dimensions
If you’d like to drop a dimension, you can use .drop_dims()
to drop the specified dimension and all variables using it as a dimension. In the sample dataset, we do not care about the bounds, so we can drop the bnds dimension and all variables associated with it.
data_set = data_set.drop_dims('bnds')
data_set
<xarray.Dataset> Dimensions: (lat: 170, lon: 180, time: 24) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Data variables: tos (time, lat, lon) float32 ... Attributes: (12/13) title: IPSL model output prepared for IPCC Fourth Assessment SR... institution: IPSL (Institut Pierre Simon Laplace, Paris, France) source: IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96... contact: Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr project_id: IPCC Fourth Assessment table_id: Table O1 (13 November 2004) ... ... realization: 1 cmor_version: 0.96 Conventions: CF-1.0 history: YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed... references: Dufresne et al, Journal of Climate, 2015, vol XX, p 136 comment: Test drive
- lat: 170
- lon: 180
- time: 24
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- tos(time, lat, lon)float32...
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
[734400 values with dtype=float32]
- title :
- IPSL model output prepared for IPCC Fourth Assessment SRES A2 experiment
- institution :
- IPSL (Institut Pierre Simon Laplace, Paris, France)
- source :
- IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v
- contact :
- Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr
- project_id :
- IPCC Fourth Assessment
- table_id :
- Table O1 (13 November 2004)
- experiment_id :
- SRES A2 experiment
- realization :
- 1
- cmor_version :
- 0.96
- Conventions :
- CF-1.0
- history :
- YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements
- references :
- Dufresne et al, Journal of Climate, 2015, vol XX, p 136
- comment :
- Test drive
When we drop a dimension, all variables using that dimension dissapear
dataarrays
Each dataset is made up of a dataarray for each variable. Variables can be accessed the same way as they can in pandas, by using .variable
or ['variable']
.
Each data array has dimensions, coordinates, and attributes. They can be accessed the same way as they were with the datasets.
# one of the variables - this is a dataarray
data_set.tos
<xarray.DataArray 'tos' (time: 24, lat: 170, lon: 180)> [734400 values with dtype=float32] Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lat: 170
- lon: 180
- ...
[734400 values with dtype=float32]
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
# selecting a variable - this is a DATAARRAY
data_array = xr.open_dataset('/Users/smurphy/Downloads/tos_O1_2001-2002.nc')['tos']
data_array
<xarray.DataArray 'tos' (time: 24, lat: 170, lon: 180)> [734400 values with dtype=float32] Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lat: 170
- lon: 180
- ...
[734400 values with dtype=float32]
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
# access one of the attributes
data_array.units
'K'
# the variable name
data_array.name
'tos'
# a numpy array of the variable values
data_array.values
array([[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.43747, 271.43796, 271.43842, ..., 271.4362 , 271.43655,
271.43698],
[271.4452 , 271.44525, 271.4453 , ..., 271.44507, 271.4451 ,
271.44513],
[271.4592 , 271.45917, 271.45914, ..., 271.45923, 271.45923,
271.4592 ]],
[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.43445, 271.4346 , 271.4348 , ..., 271.43454, 271.43436,
271.43433],
[271.44574, 271.4457 , 271.44568, ..., 271.44583, 271.4458 ,
271.44574],
[271.458 , 271.458 , 271.458 , ..., 271.45804, 271.45804,
271.45804]],
[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.42664, 271.42682, 271.42706, ..., 271.4268 , 271.4266 ,
271.42654],
[271.43332, 271.43338, 271.4334 , ..., 271.43332, 271.43332,
271.43332],
[271.44315, 271.44318, 271.4432 , ..., 271.44305, 271.44308,
271.4431 ]],
...,
[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.4633 , 271.464 , 271.4647 , ..., 271.46185, 271.46213,
271.4626 ],
[271.48102, 271.4812 , 271.48135, ..., 271.48056, 271.4807 ,
271.48087],
[271.49008, 271.49008, 271.4901 , ..., 271.49002, 271.49005,
271.49005]],
[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.45416, 271.45477, 271.45535, ..., 271.4526 , 271.453 ,
271.4535 ],
[271.46725, 271.4674 , 271.46756, ..., 271.46677, 271.46695,
271.4671 ],
[271.4751 , 271.47513, 271.4752 , ..., 271.47495, 271.475 ,
271.47504]],
[[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
[ nan, nan, nan, ..., nan, nan,
nan],
...,
[271.446 , 271.4466 , 271.44717, ..., 271.445 , 271.44516,
271.44547],
[271.46173, 271.46185, 271.46194, ..., 271.46143, 271.46155,
271.46164],
[271.4656 , 271.46564, 271.46567, ..., 271.4655 , 271.46555,
271.46558]]], dtype=float32)
# one of the coordinates by dimension
data_array.time
<xarray.DataArray 'time' (time: 24)> array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object) Coordinates: * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: time long_name: time axis: T bounds: time_bnds original_units: seconds since 2001-1-1
- time: 24
- 2001-01-16 00:00:00 2001-02-16 00:00:00 ... 2002-12-16 00:00:00
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
Calculations
Applying calculations to a dataarray applies it to each of the values.
# add 100 to each sea surface temperature value
data_set.tos + 100
<xarray.DataArray 'tos' (time: 24, lat: 170, lon: 180)> array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [371.43747, 371.43796, 371.43842, ..., 371.4362 , 371.43655, 371.43698], [371.4452 , 371.44525, 371.4453 , ..., 371.44507, 371.4451 , 371.44513], [371.4592 , 371.45917, 371.45914, ..., 371.45923, 371.45923, 371.4592 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [371.45416, 371.45477, 371.45535, ..., 371.4526 , 371.453 , 371.4535 ], [371.46725, 371.4674 , 371.46756, ..., 371.46677, 371.46695, 371.4671 ], [371.4751 , 371.47513, 371.4752 , ..., 371.47495, 371.475 , 371.47504]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [371.446 , 371.4466 , 371.44717, ..., 371.445 , 371.44516, 371.44547], [371.46173, 371.46185, 371.46194, ..., 371.46143, 371.46155, 371.46164], [371.4656 , 371.46564, 371.46567, ..., 371.4655 , 371.46555, 371.46558]]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00
- time: 24
- lat: 170
- lon: 180
- nan nan nan nan nan nan nan ... 371.5 371.5 371.5 371.5 371.5 371.5
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [371.43747, 371.43796, 371.43842, ..., 371.4362 , 371.43655, 371.43698], [371.4452 , 371.44525, 371.4453 , ..., 371.44507, 371.4451 , 371.44513], [371.4592 , 371.45917, 371.45914, ..., 371.45923, 371.45923, 371.4592 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [371.45416, 371.45477, 371.45535, ..., 371.4526 , 371.453 , 371.4535 ], [371.46725, 371.4674 , 371.46756, ..., 371.46677, 371.46695, 371.4671 ], [371.4751 , 371.47513, 371.4752 , ..., 371.47495, 371.475 , 371.47504]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [371.446 , 371.4466 , 371.44717, ..., 371.445 , 371.44516, 371.44547], [371.46173, 371.46185, 371.46194, ..., 371.46143, 371.46155, 371.46164], [371.4656 , 371.46564, 371.46567, ..., 371.4655 , 371.46555, 371.46558]]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
Means
The same functions that apply to pandas dataframes apply to datasets and dataarrays. We can use .mean()
, .std()
, etc. Dimensions to apply the function over can be specified as an argument.
# take the mean over the time dimension
data_array.mean(dim = 'time')
<xarray.DataArray 'tos' (lat: 170, lon: 180)> array([[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [271.43362, 271.434 , 271.43436, ..., 271.43314, 271.4332 , 271.43338], [271.44315, 271.44327, 271.44336, ..., 271.44284, 271.44296, 271.44308], [271.454 , 271.45404, 271.45407, ..., 271.454 , 271.45398, 271.45398]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5
- lat: 170
- lon: 180
- nan nan nan nan nan nan nan ... 271.5 271.5 271.5 271.5 271.5 271.5
array([[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [271.43362, 271.434 , 271.43436, ..., 271.43314, 271.4332 , 271.43338], [271.44315, 271.44327, 271.44336, ..., 271.44284, 271.44296, 271.44308], [271.454 , 271.45404, 271.45407, ..., 271.454 , 271.45398, 271.45398]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
Subsetting Data
Square bracket notiation works with datasets and dataarrays just as they do with pandas dataframes.
# we can subset with square brackets
data_set.tos[:, 0, 0]
<xarray.DataArray 'tos' (time: 24)> array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=float32) Coordinates: lon float64 1.0 lat float64 -79.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=float32)
- lon()float641.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array(1.)
- lat()float64-79.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(-79.5)
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Using isel
isel
is used to select data by index location.
# select the 100th latitude
data_set.tos.isel(lat=100)
<xarray.DataArray 'tos' (time: 24, lon: 180)> array([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 lat float64 20.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lon: 180
- nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan
array([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat()float6420.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(20.5)
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
# can apply to multiple dimensions at once
# can select multiple locations at once using square brackets
data_set.tos.isel(lat=100, time=[19, 21, 22])
<xarray.DataArray 'tos' (time: 3, lon: 180)> array([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 lat float64 20.5 * time (time) object 2002-08-16 00:00:00 ... 2002-11-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 3
- lon: 180
- nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan
array([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat()float6420.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(20.5)
- time(time)object2002-08-16 00:00:00 ... 2002-11-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Using sel
This selects the location based on coordinate value.
# select 59.9 latitude
data_set.tos.sel(lat = 59.5)
<xarray.DataArray 'tos' (time: 24, lon: 180)> array([[279.18256, 277.77448, nan, ..., 281.55795, 280.22382, 279.3733 ], [278.32925, 276.95786, nan, ..., 281.27155, 279.76147, 278.7534 ], [278.84393, 278.0949 , nan, ..., 281.21024, 279.91788, 279.05615], ..., [283.4372 , 283.807 , nan, ..., 283.70444, 283.6626 , 283.72565], [281.49115, 281.8585 , nan, ..., 281.9644 , 281.68082, 281.68613], [280.195 , 280.22867, nan, ..., 280.8452 , 280.5234 , 280.49036]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 lat float64 59.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lon: 180
- 279.2 277.8 nan nan nan nan ... 281.5 280.9 280.9 280.8 280.5 280.5
array([[279.18256, 277.77448, nan, ..., 281.55795, 280.22382, 279.3733 ], [278.32925, 276.95786, nan, ..., 281.27155, 279.76147, 278.7534 ], [278.84393, 278.0949 , nan, ..., 281.21024, 279.91788, 279.05615], ..., [283.4372 , 283.807 , nan, ..., 283.70444, 283.6626 , 283.72565], [281.49115, 281.8585 , nan, ..., 281.9644 , 281.68082, 281.68613], [280.195 , 280.22867, nan, ..., 280.8452 , 280.5234 , 280.49036]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat()float6459.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(59.5)
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
# we can use a nearest neighbor lookup to find the closest value
data_set.tos.sel(lat = 60, method = 'nearest')
<xarray.DataArray 'tos' (time: 24, lon: 180)> array([[280.0094 , 278.1905 , nan, ..., 281.69687, 281.31342, 280.20178], [279.30206, 277.59604, nan, ..., 281.5683 , 281.08304, 279.86734], [279.67154, 278.77203, nan, ..., 281.49667, 281.12088, 280.26282], ..., [282.7742 , 283.396 , nan, ..., 283.25375, 283.31662, 283.035 ], [281.11694, 281.468 , nan, ..., 281.57028, 281.50247, 281.33566], [280.04773, 279.76627, nan, ..., 280.5828 , 280.44357, 280.24435]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 lat float64 60.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lon: 180
- 280.0 278.2 nan nan nan nan ... 281.3 280.7 280.6 280.6 280.4 280.2
array([[280.0094 , 278.1905 , nan, ..., 281.69687, 281.31342, 280.20178], [279.30206, 277.59604, nan, ..., 281.5683 , 281.08304, 279.86734], [279.67154, 278.77203, nan, ..., 281.49667, 281.12088, 280.26282], ..., [282.7742 , 283.396 , nan, ..., 283.25375, 283.31662, 283.035 ], [281.11694, 281.468 , nan, ..., 281.57028, 281.50247, 281.33566], [280.04773, 279.76627, nan, ..., 280.5828 , 280.44357, 280.24435]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat()float6460.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(60.5)
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
# we can combine isel and sel
data_set.tos.sel(lat = 60, method = 'nearest').isel(time=[19, 21, 22])
<xarray.DataArray 'tos' (time: 3, lon: 180)> array([[286.6769 , 287.2412 , nan, ..., 286.5077 , 286.78766, 286.51523], [282.7742 , 283.396 , nan, ..., 283.25375, 283.31662, 283.035 ], [281.11694, 281.468 , nan, ..., 281.57028, 281.50247, 281.33566]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 lat float64 60.5 * time (time) object 2002-08-16 00:00:00 ... 2002-11-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 3
- lon: 180
- 286.7 287.2 nan nan nan nan ... 281.4 281.3 281.4 281.6 281.5 281.3
array([[286.6769 , 287.2412 , nan, ..., 286.5077 , 286.78766, 286.51523], [282.7742 , 283.396 , nan, ..., 283.25375, 283.31662, 283.035 ], [281.11694, 281.468 , nan, ..., 281.57028, 281.50247, 281.33566]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat()float6460.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array(60.5)
- time(time)object2002-08-16 00:00:00 ... 2002-11-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Slicing
slice()
can be used with sel
to select a range of values.
# all values betwween 30 latitude and 60 latitude
data_set.tos.sel(lat = slice(30, 60))
<xarray.DataArray 'tos' (time: 24, lat: 30, lon: 180)> array([[[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [278.45862, 277.97452, ..., nan, 278.66754], [279.18256, 277.77448, ..., 280.22382, 279.3733 ]], [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [277.63498, 276.63937, ..., nan, 277.84143], [278.32925, 276.95786, ..., 279.76147, 278.7534 ]], ..., [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [281.88965, 282.4011 , ..., nan, 281.91907], [281.49115, 281.8585 , ..., 281.68082, 281.68613]], [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [280.4388 , 280.84088, ..., nan, 280.49838], [280.195 , 280.22867, ..., 280.5234 , 280.49036]]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 30.5 31.5 32.5 33.5 34.5 ... 55.5 56.5 57.5 58.5 59.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lat: 30
- lon: 180
- nan nan nan nan nan nan nan ... 281.5 280.9 280.9 280.8 280.5 280.5
array([[[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [278.45862, 277.97452, ..., nan, 278.66754], [279.18256, 277.77448, ..., 280.22382, 279.3733 ]], [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [277.63498, 276.63937, ..., nan, 277.84143], [278.32925, 276.95786, ..., 279.76147, 278.7534 ]], ..., [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [281.88965, 282.4011 , ..., nan, 281.91907], [281.49115, 281.8585 , ..., 281.68082, 281.68613]], [[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [280.4388 , 280.84088, ..., nan, 280.49838], [280.195 , 280.22867, ..., 280.5234 , 280.49036]]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float6430.5 31.5 32.5 ... 57.5 58.5 59.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Time
sel
can be used with time strings, too.
# selecting by time
data_set.tos.sel(time = '2002-10-16')
<xarray.DataArray 'tos' (time: 1, lat: 170, lon: 180)> array([[[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [271.48102, 271.4812 , ..., 271.4807 , 271.48087], [271.49008, 271.49008, ..., 271.49005, 271.49005]]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2002-10-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 1
- lat: 170
- lon: 180
- nan nan nan nan nan nan nan ... 271.5 271.5 271.5 271.5 271.5 271.5
array([[[ nan, nan, ..., nan, nan], [ nan, nan, ..., nan, nan], ..., [271.48102, 271.4812 , ..., 271.4807 , 271.48087], [271.49008, 271.49008, ..., 271.49005, 271.49005]]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2002-10-16 00:00:00
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Using .where
.where
can be used to find only the data meeting a certain condition. For example, below we are selecting only the data greater than the temporal mean for each latitude and longitude.
# This shows where the SST is less than the mean SST over this time period for that location
data_array.where(data_set.tos < data_set.tos.mean(dim = 'time'))
<xarray.DataArray 'tos' (time: 24, lat: 170, lon: 180)> array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Attributes: standard_name: sea_surface_temperature long_name: Sea Surface Temperature units: K cell_methods: time: mean (interval: 30 minutes) original_name: sosstsst original_units: degC history: At 16:37:23 on 01/11/2005: CMOR altered the data in t...
- time: 24
- lat: 170
- lon: 180
- nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
Masking using .isin
.isin
creates a boolean array of true or false values based on a condition.
# lets look at all the latitude values
data_set.lat
<xarray.DataArray 'lat' (lat: 170)> array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5]) Coordinates: * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5 Attributes: standard_name: latitude long_name: latitude units: degrees_north axis: Y bounds: lat_bnds original_units: degrees_north
- lat: 170
- -79.5 -78.5 -77.5 -76.5 -75.5 -74.5 ... 84.5 85.5 86.5 87.5 88.5 89.5
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
# create a true/false array where the "true" latitudes are in the square brackets
data_set.lat.isin([-0.5, 59.6])
<xarray.DataArray 'lat' (lat: 170)> array([False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]) Coordinates: * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 -75.5 ... 86.5 87.5 88.5 89.5
- lat: 170
- False False False False False False ... False False False False False
array([False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
.where()
and .isin()
work well together to drop the “false” values. The drop = True
argument tells .where()
to drop the false values.
# selecing only values at the two provided latitudes
data_set.where(data_set.lat.isin([-0.5, 59.5]), drop=True)
<xarray.Dataset> Dimensions: (lat: 2, lon: 180, time: 24) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 351.0 353.0 355.0 357.0 359.0 * lat (lat) float64 -0.5 59.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Data variables: tos (time, lat, lon) float32 302.4 302.4 302.4 ... 280.8 280.5 280.5 Attributes: (12/13) title: IPSL model output prepared for IPCC Fourth Assessment SR... institution: IPSL (Institut Pierre Simon Laplace, Paris, France) source: IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96... contact: Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr project_id: IPCC Fourth Assessment table_id: Table O1 (13 November 2004) ... ... realization: 1 cmor_version: 0.96 Conventions: CF-1.0 history: YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed... references: Dufresne et al, Journal of Climate, 2015, vol XX, p 136 comment: Test drive
- lat: 2
- lon: 180
- time: 24
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-0.5 59.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-0.5, 59.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- tos(time, lat, lon)float32302.4 302.4 302.4 ... 280.5 280.5
- standard_name :
- sea_surface_temperature
- long_name :
- Sea Surface Temperature
- units :
- K
- cell_methods :
- time: mean (interval: 30 minutes)
- original_name :
- sosstsst
- original_units :
- degC
- history :
- At 16:37:23 on 01/11/2005: CMOR altered the data in the following ways: added 2.73150E+02 to yield output units; Cyclical dimension was output starting at a different lon;
array([[[302.4206 , 302.4209 , 302.44406, ..., 302.2667 , 302.33173, 302.3734 ], [279.18256, 277.77448, nan, ..., 281.55795, 280.22382, 279.3733 ]], [[302.534 , 302.4976 , 302.39658, ..., 302.37115, 302.41318, 302.48587], [278.32925, 276.95786, nan, ..., 281.27155, 279.76147, 278.7534 ]], [[302.76453, 302.69193, 302.59738, ..., 302.68216, 302.72687, 302.7646 ], [278.84393, 278.0949 , nan, ..., 281.21024, 279.91788, 279.05615]], ..., [[302.20752, 302.44897, 302.44885, ..., 300.8121 , 301.3691 , 301.7747 ], [283.4372 , 283.807 , nan, ..., 283.70444, 283.6626 , 283.72565]], [[302.35605, 302.73657, 302.94675, ..., 301.0476 , 301.44772, 301.93842], [281.49115, 281.8585 , nan, ..., 281.9644 , 281.68082, 281.68613]], [[302.9078 , 302.90298, 302.9028 , ..., 302.35587, 302.63373, 302.77618], [280.195 , 280.22867, nan, ..., 280.8452 , 280.5234 , 280.49036]]], dtype=float32)
- title :
- IPSL model output prepared for IPCC Fourth Assessment SRES A2 experiment
- institution :
- IPSL (Institut Pierre Simon Laplace, Paris, France)
- source :
- IPSL-CM4_v1 (2003) : atmosphere : LMDZ (IPSL-CM4_IPCC, 96x71x19) ; ocean ORCA2 (ipsl_cm4_v1_8, 2x2L31); sea ice LIM (ipsl_cm4_v
- contact :
- Sebastien Denvil, sebastien.denvil@ipsl.jussieu.fr
- project_id :
- IPCC Fourth Assessment
- table_id :
- Table O1 (13 November 2004)
- experiment_id :
- SRES A2 experiment
- realization :
- 1
- cmor_version :
- 0.96
- Conventions :
- CF-1.0
- history :
- YYYY/MM/JJ: data generated; YYYY/MM/JJ+1 data transformed At 16:37:23 on 01/11/2005, CMOR rewrote data to comply with CF standards and IPCC Fourth Assessment requirements
- references :
- Dufresne et al, Journal of Climate, 2015, vol XX, p 136
- comment :
- Test drive
Plotting Data
You can use the .plot()
command to visualize your data. xarray tries to figure out what plot is the best way to display the data it’s been given.
General rules for the type of plot that xarray will create for you:
- 3+ diensions - histrogram
- 2 dimensions - heatmap
- 1 dimension/timeseries - line plot
# if it has too many dimensions for anything else, it creates a histogram
data_set.tos.plot()
(array([119938., 51105., 44229., 33356., 24853., 25842., 31585.,
41638., 72574., 61040.]),
array([271.17087, 274.60416, 278.03745, 281.47073, 284.90402, 288.3373 ,
291.7706 , 295.2039 , 298.63718, 302.07047, 305.50375],
dtype=float32),
<BarContainer object of 10 artists>)

# If we remove the time dimension, we then have two dimensions and we can plot a heatmap
data_set.tos.mean(dim='time').plot()
<matplotlib.collections.QuadMesh at 0x7fdfe8983700>

# If we select a specific latitude and time, we then have only one dimension to the data and can plot a line plot
data_set.tos.isel(lat=100, time=[19, 21, 22]).plot.line(x="lon")
[<matplotlib.lines.Line2D at 0x7fe03953c640>,
<matplotlib.lines.Line2D at 0x7fe03953c5e0>,
<matplotlib.lines.Line2D at 0x7fe03953c700>]

nan
s
Many of the nan
commands are taken directly from pandas. We can create boolean masks with .isnull()
and .notnull()
.
# True = the value is nan
data_set.isnull()
<xarray.Dataset> Dimensions: (bnds: 2, lat: 170, lon: 180, time: 24) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Dimensions without coordinates: bnds Data variables: lon_bnds (lon, bnds) bool False False False False ... False False False lat_bnds (lat, bnds) bool False False False False ... False False False time_bnds (time, bnds) bool False False False False ... False False False tos (time, lat, lon) bool True True True True ... False False False
- bnds: 2
- lat: 170
- lon: 180
- time: 24
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- lon_bnds(lon, bnds)boolFalse False False ... False False
array([[False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], ... [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False]])
- lat_bnds(lat, bnds)boolFalse False False ... False False
array([[False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], ... [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False]])
- time_bnds(time, bnds)boolFalse False False ... False False
array([[False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False], [False, False]])
- tos(time, lat, lon)boolTrue True True ... False False
array([[[ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]], [[ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]], [[ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], ..., ... ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]], [[ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]], [[ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], ..., [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False]]])
# True = the value is not nan
data_set.notnull()
<xarray.Dataset> Dimensions: (bnds: 2, lat: 170, lon: 180, time: 24) Coordinates: * lon (lon) float64 1.0 3.0 5.0 7.0 9.0 ... 353.0 355.0 357.0 359.0 * lat (lat) float64 -79.5 -78.5 -77.5 -76.5 ... 86.5 87.5 88.5 89.5 * time (time) object 2001-01-16 00:00:00 ... 2002-12-16 00:00:00 Dimensions without coordinates: bnds Data variables: lon_bnds (lon, bnds) bool True True True True True ... True True True True lat_bnds (lat, bnds) bool True True True True True ... True True True True time_bnds (time, bnds) bool True True True True ... True True True True tos (time, lat, lon) bool False False False False ... True True True
- bnds: 2
- lat: 170
- lon: 180
- time: 24
- lon(lon)float641.0 3.0 5.0 ... 355.0 357.0 359.0
- standard_name :
- longitude
- long_name :
- longitude
- units :
- degrees_east
- axis :
- X
- bounds :
- lon_bnds
- original_units :
- degrees_east
array([ 1., 3., 5., 7., 9., 11., 13., 15., 17., 19., 21., 23., 25., 27., 29., 31., 33., 35., 37., 39., 41., 43., 45., 47., 49., 51., 53., 55., 57., 59., 61., 63., 65., 67., 69., 71., 73., 75., 77., 79., 81., 83., 85., 87., 89., 91., 93., 95., 97., 99., 101., 103., 105., 107., 109., 111., 113., 115., 117., 119., 121., 123., 125., 127., 129., 131., 133., 135., 137., 139., 141., 143., 145., 147., 149., 151., 153., 155., 157., 159., 161., 163., 165., 167., 169., 171., 173., 175., 177., 179., 181., 183., 185., 187., 189., 191., 193., 195., 197., 199., 201., 203., 205., 207., 209., 211., 213., 215., 217., 219., 221., 223., 225., 227., 229., 231., 233., 235., 237., 239., 241., 243., 245., 247., 249., 251., 253., 255., 257., 259., 261., 263., 265., 267., 269., 271., 273., 275., 277., 279., 281., 283., 285., 287., 289., 291., 293., 295., 297., 299., 301., 303., 305., 307., 309., 311., 313., 315., 317., 319., 321., 323., 325., 327., 329., 331., 333., 335., 337., 339., 341., 343., 345., 347., 349., 351., 353., 355., 357., 359.])
- lat(lat)float64-79.5 -78.5 -77.5 ... 88.5 89.5
- standard_name :
- latitude
- long_name :
- latitude
- units :
- degrees_north
- axis :
- Y
- bounds :
- lat_bnds
- original_units :
- degrees_north
array([-79.5, -78.5, -77.5, -76.5, -75.5, -74.5, -73.5, -72.5, -71.5, -70.5, -69.5, -68.5, -67.5, -66.5, -65.5, -64.5, -63.5, -62.5, -61.5, -60.5, -59.5, -58.5, -57.5, -56.5, -55.5, -54.5, -53.5, -52.5, -51.5, -50.5, -49.5, -48.5, -47.5, -46.5, -45.5, -44.5, -43.5, -42.5, -41.5, -40.5, -39.5, -38.5, -37.5, -36.5, -35.5, -34.5, -33.5, -32.5, -31.5, -30.5, -29.5, -28.5, -27.5, -26.5, -25.5, -24.5, -23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, -15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5, 32.5, 33.5, 34.5, 35.5, 36.5, 37.5, 38.5, 39.5, 40.5, 41.5, 42.5, 43.5, 44.5, 45.5, 46.5, 47.5, 48.5, 49.5, 50.5, 51.5, 52.5, 53.5, 54.5, 55.5, 56.5, 57.5, 58.5, 59.5, 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 87.5, 88.5, 89.5])
- time(time)object2001-01-16 00:00:00 ... 2002-12-...
- standard_name :
- time
- long_name :
- time
- axis :
- T
- bounds :
- time_bnds
- original_units :
- seconds since 2001-1-1
array([cftime.Datetime360Day(2001, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2001, 12, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 1, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 2, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 3, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 4, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 5, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 6, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 7, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 8, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 9, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 10, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 11, 16, 0, 0, 0, 0, has_year_zero=True), cftime.Datetime360Day(2002, 12, 16, 0, 0, 0, 0, has_year_zero=True)], dtype=object)
- lon_bnds(lon, bnds)boolTrue True True ... True True True
array([[ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], ... [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True]])
- lat_bnds(lat, bnds)boolTrue True True ... True True True
array([[ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], ... [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True]])
- time_bnds(time, bnds)boolTrue True True ... True True True
array([[ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True], [ True, True]])
- tos(time, lat, lon)boolFalse False False ... True True
array([[[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True]], [[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True]], [[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., ... ..., [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True]], [[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True]], [[False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], [False, False, False, ..., False, False, False], ..., [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True], [ True, True, True, ..., True, True, True]]])
Dropping nans
We can drop nans using .dropna()
just as we do in pandas.
# lets select just a section of the ocean with some nans for the following examples
ocean = data_set.tos.sel(lat = slice(0, 50), lon = slice(140, 240)).isel(time = 0)
# we see there are some nans - these are the white values
ocean.plot()
<matplotlib.collections.QuadMesh at 0x7f8bb9077a30>

# Now, let's drop the nans
# look at the x axis, it's trimmed off each side where all the longitudes with a nan value were removed
ocean.dropna(dim = "lon").plot()
<matplotlib.collections.QuadMesh at 0x7f8bb11364f0>

Filling nans
Forward/Backward
.ffill()
and .bfill()
fill the nans with the values before or after, respectively.
# we can forward fill - fill with the value directly before the nan
ocean.ffill("lon").plot()
<matplotlib.collections.QuadMesh at 0x7f8bb90a6820>

# or backward fill - fill with the value directly after
ocean.bfill("lon").plot()
<matplotlib.collections.QuadMesh at 0x7f8bd91a50d0>

# for the next few, let's look at the entire globe again
# we'll select the first time for this
data_array.isel(time = 0).plot()
<matplotlib.collections.QuadMesh at 0x7f8ba9cb8370>

Interpolation
.interpolate_na()
interpolates over all the nans. You can specify the type of interpolation with the ‘method’ argument and the dimension to interpolate over with the ‘dim’ argument.
# linear interpolation over latitude
data_array.isel(time = 0).interpolate_na(dim = "lat", method = "linear").plot()
<matplotlib.collections.QuadMesh at 0x7f8bb11aa3d0>

Constant value
.fillna()
fills all nans with the constant provided as an argument.
# filling all nans with 300
data_set.tos.isel(time = 0).fillna(300).plot()
<matplotlib.collections.QuadMesh at 0x7f8b888c7e80>

Creating a DataArray
This follows the format xr.DataArray()
with the following arguments:
- Data (required)
- Coordinates
- Dimensions
Below, we will create some artificial data to fill our dataarray with.
# create artificial data for the array
array_data = np.random.rand(4, 3)
# This gives us a 4 by 3 array
print(array_data)
[[0.99334882 0.0454209 0.46039441]
[0.94141914 0.45019312 0.84859758]
[0.78240417 0.2979781 0.66034666]
[0.64902598 0.62537498 0.3205451 ]]
# create some values for a dimension
array_locs = np.arange(0, 3, 1)
# this gives us three locational values
print(array_locs)
[0 1 2]
# create an array of times for the time dimension
array_times = pd.date_range('2000-01-01', periods = 4)
# this creates four times for our time dimension
print(array_times)
DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04'], dtype='datetime64[ns]', freq='D')
Syntax
We can create our data arrays a few different ways. We can specify our arguments using:
- Lists
- Tuples
- Dictionaries
Using Lists
# coords = [] and dims = [] are lists
my_data_array = xr.DataArray(array_data, coords = [array_times, array_locs], dims=["time", "space"])
# Notice the coords is the actual data and the dims are just the names
my_data_array
<xarray.DataArray (time: 4, space: 3)> array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2
- time: 4
- space: 3
- 0.9933 0.04542 0.4604 0.9414 0.4502 ... 0.6603 0.649 0.6254 0.3205
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
Using Tuples
# re-generating the random numbers so this variable can be different
array_data = np.random.rand(4, 3)
# coords = [(), ()] is a tuple
my_data_array_2 = xr.DataArray(array_data, coords = [("time", array_times), ("space", array_locs)])
my_data_array_2
<xarray.DataArray (time: 4, space: 3)> array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2
- time: 4
- space: 3
- 0.2759 0.9917 0.5151 0.3683 0.7118 ... 0.9999 0.786 0.4834 0.9531
array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
Using Dictionaries
# more random data
array_data = np.random.rand(4, 3)
# coords = {:,:} is a dictionary
# dims = [] is a list
my_data_array_3 = xr.DataArray(array_data, coords = {"time": array_times, "space": array_locs}, dims=["time", "space"])
my_data_array_3
<xarray.DataArray (time: 4, space: 3)> array([[0.45573796, 0.3309092 , 0.41282608], [0.218315 , 0.85783688, 0.37501811], [0.08926377, 0.66350878, 0.30823531], [0.2010384 , 0.88635444, 0.05059817]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2
- time: 4
- space: 3
- 0.4557 0.3309 0.4128 0.2183 0.8578 ... 0.3082 0.201 0.8864 0.0506
array([[0.45573796, 0.3309092 , 0.41282608], [0.218315 , 0.85783688, 0.37501811], [0.08926377, 0.66350878, 0.30823531], [0.2010384 , 0.88635444, 0.05059817]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
Renaming Dataarrays
Dataarrays must have names to be included in a dataset. Right now, our dataarrays do not have names, but once we use .rename()
they will.
# naming this random data sst
my_data_array = my_data_array.rename('sst')
my_data_array
<xarray.DataArray 'sst' (time: 4, space: 3)> array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2
- time: 4
- space: 3
- 0.9933 0.04542 0.4604 0.9414 0.4502 ... 0.6603 0.649 0.6254 0.3205
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
Adding Attributes
We can add attributes (or metadata) to our data array by setting .attrs[""]
equal to the information, with the argument as the title of the new attribute.
.attrs["Attribute Title"] = attribute information
# Add an attribute
my_data_array.attrs["Random Number"] = 73
my_data_array
<xarray.DataArray 'sst' (time: 4, space: 3)> array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Attributes: Random Number: 73
- time: 4
- space: 3
- 0.9933 0.04542 0.4604 0.9414 0.4502 ... 0.6603 0.649 0.6254 0.3205
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- Random Number :
- 73
Creating a DataSet
Remember that a dataset is just a group of dataarrays. We can change our dataarray into a dataset using the .to_dataset()
command.
my_data_set = my_data_array.to_dataset()
my_data_set
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 0.9933 0.04542 0.4604 ... 0.649 0.6254 0.3205
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float640.9933 0.04542 ... 0.6254 0.3205
- Random Number :
- 73
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
Merging
Two datasets can be combined using the .merge()
command. This works seamlessly here because all our coordinates are the same between data arrays.
# creating a second dataset - renaming the second dataarray then turning into a dataset
my_data_array_2 = my_data_array_2.rename("tsk").to_dataset()
my_data_array_2
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: tsk (time, space) float64 0.2759 0.9917 0.5151 ... 0.786 0.4834 0.9531
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- tsk(time, space)float640.2759 0.9917 ... 0.4834 0.9531
array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]])
# putting the two dataarrays together
my_data_set = xr.merge([my_data_set, my_data_array_2])
my_data_set
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 0.9933 0.04542 0.4604 ... 0.649 0.6254 0.3205 tsk (time, space) float64 0.2759 0.9917 0.5151 ... 0.786 0.4834 0.9531
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float640.9933 0.04542 ... 0.6254 0.3205
- Random Number :
- 73
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- tsk(time, space)float640.2759 0.9917 ... 0.4834 0.9531
array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]])
my_data_set.tsk # we use our name to call the dataarray from the dataset
<xarray.DataArray 'tsk' (time: 4, space: 3)> array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2
- time: 4
- space: 3
- 0.2759 0.9917 0.5151 0.3683 0.7118 ... 0.9999 0.786 0.4834 0.9531
array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
Creating a netCDF file
Use .to_netcdf()
to save a dataarray as a netCDF. All attributes, dimensions, coordinates, and variables in the dataset will be saved. Provide the command with the desired path and filename.
# remind ourselves what this looks like
my_data_set
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 0.9933 0.04542 0.4604 ... 0.649 0.6254 0.3205 tsk (time, space) float64 0.2759 0.9917 0.5151 ... 0.786 0.4834 0.9531
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float640.9933 0.04542 ... 0.6254 0.3205
- Random Number :
- 73
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- tsk(time, space)float640.2759 0.9917 ... 0.4834 0.9531
array([[0.27586768, 0.99168473, 0.51512073], [0.36826376, 0.71184145, 0.035238 ], [0.84453335, 0.09139228, 0.99993453], [0.78602486, 0.48341199, 0.95310979]])
# saving my_data_set as my_netcdf.nd in the same folder as my notebook
my_data_set.to_netcdf("my_netcdf.nc")
# reading it back in so we can see that it looks the same as before we saved it
xr.open_dataset("my_netcdf.nc")
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 0.9933 0.04542 0.4604 ... 0.649 0.6254 0.3205 tsk (time, space) float64 0.2759 0.9917 0.5151 ... 0.786 0.4834 0.9531
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float64...
- Random Number :
- 73
array([[0.993349, 0.045421, 0.460394], [0.941419, 0.450193, 0.848598], [0.782404, 0.297978, 0.660347], [0.649026, 0.625375, 0.320545]])
- tsk(time, space)float64...
array([[0.275868, 0.991685, 0.515121], [0.368264, 0.711841, 0.035238], [0.844533, 0.091392, 0.999935], [0.786025, 0.483412, 0.95311 ]])
Reading in Multiple Files
Often if a dataset spans a large time period, or is just large in general, it will be split into multiple netCDF files. For example, I work with an atmospheric model and it outputs netCDF data. Each file it creates has the same latitude, longitude, and variables, but spans a different time, so I often want to read all the files in at once to create one dataarray with all the times. Alternatively, you may have a file with the same latitude, longitude, and time, but different variables that you want to join. The following example shows the latter situation.
open_mfdataset()
is the argument to open a multi-file dataset. Provide the path to the dataset as the argument, using as astaristic (*
) as a wildcard.
# let's create another dataset so we can read in both
# first we must rename
my_data_array_3 = my_data_array_3.rename("t2m")
# then we can create a dataset
my_data_set_3 = my_data_array_3.to_dataset()
# now we can save this
my_data_set_3.to_netcdf("my_netcdf_2.nc")
# opening the dataset we just created to look at it
xr.open_dataset("my_netcdf_2.nc")
# opening the first dataset we created
# remember that this one has two variables because we merged two datasets before saving
xr.open_dataset("my_netcdf.nc")
# now, lets open the datasets and see how they save
new_ds = xr.open_mfdataset("/Users/smurphy/my_netcdf*.nc")
new_ds
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 dask.array<chunksize=(4, 3), meta=np.ndarray> tsk (time, space) float64 dask.array<chunksize=(4, 3), meta=np.ndarray> t2m (time, space) float64 dask.array<chunksize=(4, 3), meta=np.ndarray>
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float64dask.array<chunksize=(4, 3), meta=np.ndarray>
- Random Number :
- 73
Array Chunk Bytes 96 B 96 B Shape (4, 3) (4, 3) Count 2 Tasks 1 Chunks Type float64 numpy.ndarray - tsk(time, space)float64dask.array<chunksize=(4, 3), meta=np.ndarray>
Array Chunk Bytes 96 B 96 B Shape (4, 3) (4, 3) Count 2 Tasks 1 Chunks Type float64 numpy.ndarray - t2m(time, space)float64dask.array<chunksize=(4, 3), meta=np.ndarray>
Array Chunk Bytes 96 B 96 B Shape (4, 3) (4, 3) Count 2 Tasks 1 Chunks Type float64 numpy.ndarray
.open_mfdataset()
opened all our datasets, recognized that the time and space dimensions were the same, and combined the variables into one dataset.
These are read in as dask.array
s, which means theyre “chunked” and ready for parallel computing. The parallel computing aspect is beyond the scope of this talk, but this dataset can be used just as one without chunks, so we can just ignore them if we aren’t planning to do any parallel computing.
# we can do the same types of things with this dataset as we can with the others
new_ds.mean(dim = 'time')
<xarray.Dataset> Dimensions: (space: 3) Coordinates: * space (space) int64 0 1 2 Data variables: sst (space) float64 dask.array<chunksize=(3,), meta=np.ndarray> tsk (space) float64 dask.array<chunksize=(3,), meta=np.ndarray> t2m (space) float64 dask.array<chunksize=(3,), meta=np.ndarray>
- space: 3
- space(space)int640 1 2
array([0, 1, 2])
- sst(space)float64dask.array<chunksize=(3,), meta=np.ndarray>
Array Chunk Bytes 24 B 24 B Shape (3,) (3,) Count 4 Tasks 1 Chunks Type float64 numpy.ndarray - tsk(space)float64dask.array<chunksize=(3,), meta=np.ndarray>
Array Chunk Bytes 24 B 24 B Shape (3,) (3,) Count 4 Tasks 1 Chunks Type float64 numpy.ndarray - t2m(space)float64dask.array<chunksize=(3,), meta=np.ndarray>
Array Chunk Bytes 24 B 24 B Shape (3,) (3,) Count 4 Tasks 1 Chunks Type float64 numpy.ndarray
Working with Pandas
As pandas and xarray are closely related, it is very easy to switch between the two.
From | To | Command |
---|---|---|
xarray dataarray | pandas dataframe, long format | .to_dataframe() |
xarray dataarray | pandas dataframe, keeping dimensions | .to_pandas() |
pandas dataframe | xarray dataarray | .to_xarray() |
my_data_array
<xarray.DataArray 'sst' (time: 4, space: 3)> array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]]) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Attributes: Random Number: 73
- time: 4
- space: 3
- 0.9933 0.04542 0.4604 0.9414 0.4502 ... 0.6603 0.649 0.6254 0.3205
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- Random Number :
- 73
# we can create a pandas dataframe using to_dataframe() - this is in long format
pandas_df_long = my_data_array.to_dataframe()
pandas_df_long
sst | ||
---|---|---|
time | space | |
2000-01-01 | 0 | 0.993349 |
1 | 0.045421 | |
2 | 0.460394 | |
2000-01-02 | 0 | 0.941419 |
1 | 0.450193 | |
2 | 0.848598 | |
2000-01-03 | 0 | 0.782404 |
1 | 0.297978 | |
2 | 0.660347 | |
2000-01-04 | 0 | 0.649026 |
1 | 0.625375 | |
2 | 0.320545 |
# or, if we would like to keep the dimensions, we can use to_pandas
pandas_df_wide = my_data_array.to_pandas()
pandas_df_wide
space | 0 | 1 | 2 |
---|---|---|---|
time | |||
2000-01-01 | 0.993349 | 0.045421 | 0.460394 |
2000-01-02 | 0.941419 | 0.450193 | 0.848598 |
2000-01-03 | 0.782404 | 0.297978 | 0.660347 |
2000-01-04 | 0.649026 | 0.625375 | 0.320545 |
# and, to go from the pandas dataframe back to a dataset
pandas_df_long.to_xarray()
<xarray.Dataset> Dimensions: (space: 3, time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 * space (space) int64 0 1 2 Data variables: sst (time, space) float64 0.9933 0.04542 0.4604 ... 0.649 0.6254 0.3205
- space: 3
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- space(space)int640 1 2
array([0, 1, 2])
- sst(time, space)float640.9933 0.04542 ... 0.6254 0.3205
array([[0.99334882, 0.0454209 , 0.46039441], [0.94141914, 0.45019312, 0.84859758], [0.78240417, 0.2979781 , 0.66034666], [0.64902598, 0.62537498, 0.3205451 ]])
pandas_df_wide.to_xarray()
<xarray.Dataset> Dimensions: (time: 4) Coordinates: * time (time) datetime64[ns] 2000-01-01 2000-01-02 2000-01-03 2000-01-04 Data variables: 0 (time) float64 0.9933 0.9414 0.7824 0.649 1 (time) float64 0.04542 0.4502 0.298 0.6254 2 (time) float64 0.4604 0.8486 0.6603 0.3205
- time: 4
- time(time)datetime64[ns]2000-01-01 ... 2000-01-04
array(['2000-01-01T00:00:00.000000000', '2000-01-02T00:00:00.000000000', '2000-01-03T00:00:00.000000000', '2000-01-04T00:00:00.000000000'], dtype='datetime64[ns]')
- 0(time)float640.9933 0.9414 0.7824 0.649
array([0.99334882, 0.94141914, 0.78240417, 0.64902598])
- 1(time)float640.04542 0.4502 0.298 0.6254
array([0.0454209 , 0.45019312, 0.2979781 , 0.62537498])
- 2(time)float640.4604 0.8486 0.6603 0.3205
array([0.46039441, 0.84859758, 0.66034666, 0.3205451 ])
Notice how when we convert the wide pandas data to xarray we don’t get the correct variables and coordinates. Keep this in mind when switching between the two and be careful with how your data is formatted before switching to xarray from pandas.