diff --git a/pandas/core/series.py b/pandas/core/series.py index df0fa1c6c0659..2e6270e8739ae 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -2951,74 +2951,25 @@ def unstack(self, level=-1, fill_value=None): def map(self, arg, na_action=None): """ - Map values of Series using input correspondence (a dict, Series, or - function). + Map values of Series according to input correspondence. + + Used for substituting each value in a Series with another value, + that may be derived from a function, a ``dict`` or + a :class:`Series`. Parameters ---------- arg : function, dict, or Series Mapping correspondence. - na_action : {None, 'ignore'} - If 'ignore', propagate NA values, without passing them to the + na_action : {None, 'ignore'}, default None + If 'ignore', propagate NaN values, without passing them to the mapping correspondence. Returns ------- - y : Series + Series Same index as caller. - Examples - -------- - - Map inputs to outputs (both of type `Series`): - - >>> x = pd.Series([1,2,3], index=['one', 'two', 'three']) - >>> x - one 1 - two 2 - three 3 - dtype: int64 - - >>> y = pd.Series(['foo', 'bar', 'baz'], index=[1,2,3]) - >>> y - 1 foo - 2 bar - 3 baz - - >>> x.map(y) - one foo - two bar - three baz - - If `arg` is a dictionary, return a new Series with values converted - according to the dictionary's mapping: - - >>> z = {1: 'A', 2: 'B', 3: 'C'} - - >>> x.map(z) - one A - two B - three C - - Use na_action to control whether NA values are affected by the mapping - function. - - >>> s = pd.Series([1, 2, 3, np.nan]) - - >>> s2 = s.map('this is a string {}'.format, na_action=None) - 0 this is a string 1.0 - 1 this is a string 2.0 - 2 this is a string 3.0 - 3 this is a string nan - dtype: object - - >>> s3 = s.map('this is a string {}'.format, na_action='ignore') - 0 this is a string 1.0 - 1 this is a string 2.0 - 2 this is a string 3.0 - 3 NaN - dtype: object - See Also -------- Series.apply : For applying more complex functions on a Series. @@ -3027,20 +2978,51 @@ def map(self, arg, na_action=None): Notes ----- - When `arg` is a dictionary, values in Series that are not in the + When ``arg`` is a dictionary, values in Series that are not in the dictionary (as keys) are converted to ``NaN``. However, if the dictionary is a ``dict`` subclass that defines ``__missing__`` (i.e. provides a method for default values), then this default is used - rather than ``NaN``: - - >>> from collections import Counter - >>> counter = Counter() - >>> counter['bar'] += 1 - >>> y.map(counter) - 1 0 - 2 1 - 3 0 - dtype: int64 + rather than ``NaN``. + + Examples + -------- + >>> s = pd.Series(['cat', 'dog', np.nan, 'rabbit']) + >>> s + 0 cat + 1 dog + 2 NaN + 3 rabbit + dtype: object + + ``map`` accepts a ``dict`` or a ``Series``. Values that are not found + in the ``dict`` are converted to ``NaN``, unless the dict has a default + value (e.g. ``defaultdict``): + + >>> s.map({'cat': 'kitten', 'dog': 'puppy'}) + 0 kitten + 1 puppy + 2 NaN + 3 NaN + dtype: object + + It also accepts a function: + + >>> s.map('I am a {}'.format) + 0 I am a cat + 1 I am a dog + 2 I am a nan + 3 I am a rabbit + dtype: object + + To avoid applying the function to missing values (and keep them as + ``NaN``) ``na_action='ignore'`` can be used: + + >>> s.map('I am a {}'.format, na_action='ignore') + 0 I am a cat + 1 I am a dog + 2 NaN + 3 I am a rabbit + dtype: object """ new_values = super(Series, self)._map_values( arg, na_action=na_action)