You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When given a callable, :meth:`Series.map` applies the callable to all elements of the :class:`Series`.
28
+
Similarly, :meth:`DataFrame.applymap` applies the callable to all elements of the :class:`DataFrame`,
29
+
while :meth:`Index.map` applies the callable to all elements of the :class:`Index`.
30
+
31
+
Frequently, it is not desirable to apply the callable to nan-like values of the array and to avoid doing
32
+
that, the ``map`` method could be called with ``na_action="ignore"``, i.e. ``ser.map(func, na_action="ignore")``.
33
+
However, ``na_action="ignore"`` was not implemented for many ``ExtensionArray`` and ``Index`` types
34
+
and ``na_action="ignore"`` did not work correctly for any ``ExtensionArray`` subclass except the nullable numeric ones (i.e. with dtype :class:`Int64` etc.).
35
+
36
+
``na_action="ignore"`` now works for all array types (:issue:`52219`, :issue:`51645`, :issue:`51809`, :issue:`51936`, :issue:`52033`; :issue:`52096`).
37
+
38
+
*Previous behavior*:
39
+
40
+
.. code-block:: ipython
41
+
42
+
In [1]: ser = pd.Series(["a", "b", np.nan], dtype="category")
43
+
In [2]: ser.map(str.upper, na_action="ignore")
44
+
NotImplementedError
45
+
In [3]: df = pd.DataFrame(ser)
46
+
In [4]: df.applymap(str.upper, na_action="ignore") # worked for DataFrame
47
+
0
48
+
0 A
49
+
1 B
50
+
2 NaN
51
+
In [5]: idx = pd.Index(ser)
52
+
In [6]: idx.map(str.upper, na_action="ignore")
53
+
TypeError: CategoricalIndex.map() got an unexpected keyword argument 'na_action'
54
+
55
+
*New behavior*:
56
+
57
+
.. ipython:: python
58
+
59
+
ser = pd.Series(["a", "b", np.nan], dtype="category")
60
+
ser.map(str.upper, na_action="ignore")
61
+
df = pd.DataFrame(ser)
62
+
df.applymap(str.upper, na_action="ignore")
63
+
idx = pd.Index(ser)
64
+
idx.map(str.upper, na_action="ignore")
65
+
66
+
Also, note that :meth:`Categorical.map` implicitly has had its ``na_action`` set to ``"ignore"`` by default.
67
+
This has been deprecated and will :meth:`Categorical.map` in the future change the default
68
+
to ``na_action=None``, like for all the other array types.
26
69
27
70
.. _whatsnew_210.enhancements.other:
28
71
@@ -34,6 +77,7 @@ Other enhancements
34
77
- Implemented ``__pandas_priority__`` to allow custom types to take precedence over :class:`DataFrame`, :class:`Series`, :class:`Index`, or :class:`ExtensionArray` for arithmetic operations, :ref:`see the developer guide <extending.pandas_priority>` (:issue:`48347`)
35
78
- :meth:`MultiIndex.sort_values` now supports ``na_position`` (:issue:`51612`)
36
79
- :meth:`MultiIndex.sortlevel` and :meth:`Index.sortlevel` gained a new keyword ``na_position`` (:issue:`51612`)
80
+
- :meth:`arrays.DatetimeArray.map`, :meth:`arrays.TimedeltaArray.map` and :meth:`arrays.PeriodArray.map` can now take a ``na_action`` argument (:issue:`51644`)
37
81
- Improve error message when setting :class:`DataFrame` with wrong number of columns through :meth:`DataFrame.isetitem` (:issue:`51701`)
38
82
- Let :meth:`DataFrame.to_feather` accept a non-default :class:`Index` and non-string column names (:issue:`51787`)
39
83
- :class:`api.extensions.ExtensionArray` now has a :meth:`~api.extensions.ExtensionArray.map` method (:issue:`51809`)
@@ -42,7 +86,6 @@ Other enhancements
42
86
- Improved error message when creating a DataFrame with empty data (0 rows), no index and an incorrect number of columns. (:issue:`52084`)
43
87
- :meth:`DataFrame.applymap` now uses the :meth:`~api.extensions.ExtensionArray.map` method of underlying :class:`api.extensions.ExtensionArray` instances (:issue:`52219`)
44
88
- :meth:`arrays.SparseArray.map` now supports ``na_action`` (:issue:`52096`).
45
-
- :meth:`Categorical.map` and :meth:`CategoricalIndex.map` now have a ``na_action`` parameter (:issue:`44279`)
46
89
- Add dtype of categories to ``repr`` information of :class:`CategoricalDtype` (:issue:`52179`)
47
90
-
48
91
@@ -168,15 +211,15 @@ Categorical
168
211
Datetimelike
169
212
^^^^^^^^^^^^
170
213
- Bug in :meth:`Timestamp.round` with values close to the implementation bounds returning incorrect results instead of raising ``OutOfBoundsDatetime`` (:issue:`51494`)
171
-
- :meth:`arrays.DatetimeArray.map` can now take a ``na_action`` argument. :meth:`DatetimeIndex.map` with ``na_action="ignore"`` now works as expected. (:issue:`51644`)
214
+
- :meth:`DatetimeIndex.map` with ``na_action="ignore"`` now works as expected. (:issue:`51644`)
172
215
- Bug in :meth:`arrays.DatetimeArray.map` and :meth:`DatetimeIndex.map`, where the supplied callable operated array-wise instead of element-wise (:issue:`51977`)
173
216
-
174
217
175
218
Timedelta
176
219
^^^^^^^^^
177
220
- Bug in :meth:`Timedelta.round` with values close to the implementation bounds returning incorrect results instead of raising ``OutOfBoundsTimedelta`` (:issue:`51494`)
178
221
- Bug in :class:`TimedeltaIndex` division or multiplication leading to ``.freq`` of "0 Days" instead of ``None`` (:issue:`51575`)
179
-
- :meth:`arrays.TimedeltaArray.map` can now take a ``na_action`` argument. :meth:`TimedeltaIndex.map` with ``na_action="ignore"`` now works as expected. (:issue:`51644`)
222
+
- :meth:`TimedeltaIndex.map` with ``na_action="ignore"`` now works as expected (:issue:`51644`)
180
223
- Bug in :meth:`arrays.TimedeltaArray.map` and :meth:`TimedeltaIndex.map`, where the supplied callable operated array-wise instead of element-wise (:issue:`51977`)
181
224
-
182
225
@@ -232,7 +275,7 @@ I/O
232
275
Period
233
276
^^^^^^
234
277
- Bug in :class:`PeriodDtype` constructor failing to raise ``TypeError`` when no argument is passed or when ``None`` is passed (:issue:`27388`)
235
-
- :meth:`arrays.PeriodArray.map` can now take a ``na_action`` argument. :meth:`PeriodIndex.map` with ``na_action="ignore"`` now works as expected. (:issue:`51644`)
278
+
- :meth:`PeriodIndex.map` with ``na_action="ignore"`` now works as expected (:issue:`51644`)
236
279
- Bug in :class:`PeriodDtype` constructor raising ``ValueError`` instead of ``TypeError`` when an invalid type is passed (:issue:`51790`)
237
280
- Bug in :meth:`arrays.PeriodArray.map` and :meth:`PeriodIndex.map`, where the supplied callable operated array-wise instead of element-wise (:issue:`51977`)
0 commit comments