diff --git a/pandas/core/arrays/arrow/array.py b/pandas/core/arrays/arrow/array.py index 919453b29b7f9..382b5cf715c7e 100644 --- a/pandas/core/arrays/arrow/array.py +++ b/pandas/core/arrays/arrow/array.py @@ -1490,10 +1490,9 @@ def to_numpy( return result def map(self, mapper, na_action: Literal["ignore"] | None = None): - if is_numeric_dtype(self.dtype): + if self.dtype.kind in "mM" or is_numeric_dtype(self.dtype): return map_array(self.to_numpy(), mapper, na_action=na_action) - else: - return super().map(mapper, na_action) + return super().map(mapper, na_action) @doc(ExtensionArray.duplicated) def duplicated( diff --git a/pandas/tests/extension/test_arrow.py b/pandas/tests/extension/test_arrow.py index 7e7cd8fb13456..ba1a3bfc6ddf5 100644 --- a/pandas/tests/extension/test_arrow.py +++ b/pandas/tests/extension/test_arrow.py @@ -64,6 +64,7 @@ is_string_dtype, is_unsigned_integer_dtype, ) +from pandas.core.algorithms import map_array from pandas.tests.extension import base pa = pytest.importorskip("pyarrow") @@ -278,8 +279,9 @@ def test_compare_scalar(self, data, comparison_op): @pytest.mark.parametrize("na_action", [None, "ignore"]) def test_map(self, data_missing, na_action): if data_missing.dtype.kind in "mM": - result = data_missing.map(lambda x: x, na_action=na_action) - expected = data_missing.to_numpy(dtype=object) + mapper = lambda x: x + result = data_missing.map(mapper, na_action=na_action) + expected = map_array(data_missing.to_numpy(), mapper, na_action=na_action) tm.assert_numpy_array_equal(result, expected) else: result = data_missing.map(lambda x: x, na_action=na_action)