πΎ Xarray is now 10 years old! π

# xarray.Dataset.assign_coords#

Dataset.assign_coords(coords=None, **coords_kwargs)[source]#

Assign new coordinates to this object.

Returns a new object with all the original data in addition to the new coordinates.

Parameters:
• coords (mapping of `dim` to `coord`, optional) β A mapping whose keys are the names of the coordinates and values are the coordinates to assign. The mapping will generally be a dict or `Coordinates`.

• If a value is a standard data value β for example, a `DataArray`, scalar, or array β the data is simply assigned as a coordinate.

• If a value is callable, it is called with this object as the only parameter, and the return value is used as new coordinate variables.

• A coordinate can also be defined and attached to an existing dimension using a tuple with the first element the dimension name and the second element the values for this new coordinate.

• **coords_kwargs (optional) β The keyword arguments form of `coords`. One of `coords` or `coords_kwargs` must be provided.

Returns:

assigned (`same type as caller`) β A new object with the new coordinates in addition to the existing data.

Examples

Convert DataArray longitude coordinates from 0-359 to -180-179:

```>>> da = xr.DataArray(
...     np.random.rand(4),
...     coords=[np.array([358, 359, 0, 1])],
...     dims="lon",
... )
>>> da
<xarray.DataArray (lon: 4)>
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
Coordinates:
* lon      (lon) int64 358 359 0 1
>>> da.assign_coords(lon=(((da.lon + 180) % 360) - 180))
<xarray.DataArray (lon: 4)>
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
Coordinates:
* lon      (lon) int64 -2 -1 0 1
```

The function also accepts dictionary arguments:

```>>> da.assign_coords({"lon": (((da.lon + 180) % 360) - 180)})
<xarray.DataArray (lon: 4)>
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
Coordinates:
* lon      (lon) int64 -2 -1 0 1
```

New coordinate can also be attached to an existing dimension:

```>>> lon_2 = np.array([300, 289, 0, 1])
>>> da.assign_coords(lon_2=("lon", lon_2))
<xarray.DataArray (lon: 4)>
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
Coordinates:
* lon      (lon) int64 358 359 0 1
lon_2    (lon) int64 300 289 0 1
```

Note that the same result can also be obtained with a dict e.g.

```>>> _ = da.assign_coords({"lon_2": ("lon", lon_2)})
```

Note the same method applies to Dataset objects.

Convert Dataset longitude coordinates from 0-359 to -180-179:

```>>> temperature = np.linspace(20, 32, num=16).reshape(2, 2, 4)
>>> precipitation = 2 * np.identity(4).reshape(2, 2, 4)
>>> ds = xr.Dataset(
...     data_vars=dict(
...         temperature=(["x", "y", "time"], temperature),
...         precipitation=(["x", "y", "time"], precipitation),
...     ),
...     coords=dict(
...         lon=(["x", "y"], [[260.17, 260.68], [260.21, 260.77]]),
...         lat=(["x", "y"], [[42.25, 42.21], [42.63, 42.59]]),
...         time=pd.date_range("2014-09-06", periods=4),
...         reference_time=pd.Timestamp("2014-09-05"),
...     ),
...     attrs=dict(description="Weather-related data"),
... )
>>> ds
<xarray.Dataset>
Dimensions:         (x: 2, y: 2, time: 4)
Coordinates:
lon             (x, y) float64 260.2 260.7 260.2 260.8
lat             (x, y) float64 42.25 42.21 42.63 42.59
* time            (time) datetime64[ns] 2014-09-06 2014-09-07 ... 2014-09-09
reference_time  datetime64[ns] 2014-09-05
Dimensions without coordinates: x, y
Data variables:
temperature     (x, y, time) float64 20.0 20.8 21.6 22.4 ... 30.4 31.2 32.0
precipitation   (x, y, time) float64 2.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 2.0
Attributes:
description:  Weather-related data
>>> ds.assign_coords(lon=(((ds.lon + 180) % 360) - 180))
<xarray.Dataset>
Dimensions:         (x: 2, y: 2, time: 4)
Coordinates:
lon             (x, y) float64 -99.83 -99.32 -99.79 -99.23
lat             (x, y) float64 42.25 42.21 42.63 42.59
* time            (time) datetime64[ns] 2014-09-06 2014-09-07 ... 2014-09-09
reference_time  datetime64[ns] 2014-09-05
Dimensions without coordinates: x, y
Data variables:
temperature     (x, y, time) float64 20.0 20.8 21.6 22.4 ... 30.4 31.2 32.0
precipitation   (x, y, time) float64 2.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 2.0
Attributes:
description:  Weather-related data
```