, na_action=None)[source]#

Map values using input an input mapping or function.

Maps the values (their categories, not the codes) of the index to new categories. If the mapping correspondence is one-to-one the result is a CategoricalIndex which has the same order property as the original, otherwise an Index is returned.

If a dict or Series is used any unmapped category is mapped to NaN. Note that if this happens an Index will be returned.

mapperfunction, dict, or Series

Mapping correspondence.

na_action{None, ‘ignore’}, default ‘ignore’

If ‘ignore’, propagate NaN values, without passing them to the mapping correspondence.

pandas.CategoricalIndex or pandas.Index

Mapped index.

See also

Apply a mapping correspondence on an Index.

Apply a mapping correspondence on a Series.


Apply more complex functions on a Series.


>>> idx = pd.CategoricalIndex(["a", "b", "c"])
>>> idx
CategoricalIndex(['a', 'b', 'c'], categories=['a', 'b', 'c'],
                  ordered=False, dtype='category')
>>> x: x.upper())
CategoricalIndex(['A', 'B', 'C'], categories=['A', 'B', 'C'],
                 ordered=False, dtype='category')
>>>{"a": "first", "b": "second", "c": "third"})
CategoricalIndex(['first', 'second', 'third'], categories=['first',
                 'second', 'third'], ordered=False, dtype='category')

If the mapping is one-to-one the ordering of the categories is preserved:

>>> idx = pd.CategoricalIndex(["a", "b", "c"], ordered=True)
>>> idx
CategoricalIndex(['a', 'b', 'c'], categories=['a', 'b', 'c'],
                 ordered=True, dtype='category')
>>>{"a": 3, "b": 2, "c": 1})
CategoricalIndex([3, 2, 1], categories=[3, 2, 1], ordered=True,

If the mapping is not one-to-one an Index is returned:

>>>{"a": "first", "b": "second", "c": "first"})
Index(['first', 'second', 'first'], dtype='object')

If a dict is used, all unmapped categories are mapped to NaN and the result is an Index:

>>>{"a": "first", "b": "second"})
Index(['first', 'second', nan], dtype='object')