Description
What happened?
We used Data{set,Array}.rename{_vars}({coord: dim_coord})
to make a coordinate a dimension coordinate (instead of set_index
).
This results in the coordinate correctly being displayed as a dimension coordinate (with the *) but it does not create an index, such that further operations like sel
fail with a strange KeyError
.
What did you expect to happen?
I expect one of two things to be true:
rename{_vars}
does not allow setting dimension coordinates (raises Error and tells you to use set_index)rename{_vars}
checks for this occasion and sets the index correctly
Minimal Complete Verifiable Example
import xarray as xr
data = xr.DataArray([5, 6, 7], coords={"c": ("x", [1, 2, 3])}, dims="x")
# <xarray.DataArray (x: 3)>
# array([5, 6, 7])
# Coordinates:
# c (x) int64 1 2 3
# Dimensions without coordinates: x
data_renamed = data.rename({"c": "x"})
# <xarray.DataArray (x: 3)>
# array([5, 6, 7])
# Coordinates:
# * x (x) int64 1 2 3
data_renamed.indexes
# Empty
data_renamed.sel(x=2)
# KeyError: 'no index found for coordinate x'
# if we use set_index it works
data_indexed = data.set_index({"x": "c"})
# looks the same as data_renamed!
# <xarray.DataArray (x: 3)>
# array([1, 2, 3])
# Coordinates:
# * x (x) int64 1 2 3
data_indexed.indexes
# x: Int64Index([1, 2, 3], dtype='int64', name='x')
Relevant log output
No response
Anything else we need to know?
No response
Environment
INSTALLED VERSIONS
commit: None
python: 3.9.1 (default, Jan 13 2021, 15:21:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
python-bits: 64
OS: Linux
OS-release: 3.10.0-1160.49.1.el7.x86_64
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: ('en_US', 'UTF-8')
libhdf5: 1.12.0
libnetcdf: 4.7.4
xarray: 0.20.2
pandas: 1.3.5
numpy: 1.21.5
scipy: 1.7.3
netCDF4: 1.5.8
pydap: None
h5netcdf: None
h5py: None
Nio: None
zarr: None
cftime: 1.5.1.1
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: None
iris: None
bottleneck: None
dask: None
distributed: None
matplotlib: 3.5.1
cartopy: None
seaborn: None
numbagg: None
fsspec: None
cupy: None
pint: None
sparse: None
setuptools: 49.2.1
pip: 22.0.2
conda: None
pytest: 6.2.5
IPython: 8.0.0
sphinx: None