diff --git a/pandas/core/arrays/masked.py b/pandas/core/arrays/masked.py index b00e362e1309a..bddca5bed6ff8 100644 --- a/pandas/core/arrays/masked.py +++ b/pandas/core/arrays/masked.py @@ -149,6 +149,8 @@ def _from_sequence(cls, scalars, *, dtype=None, copy: bool = False) -> Self: return cls(values, mask) def _cast_pointwise_result(self, values) -> ArrayLike: + if isna(values).all(): + return type(self)._from_sequence(values, dtype=self.dtype) values = np.asarray(values, dtype=object) result = lib.maybe_convert_objects(values, convert_to_nullable_dtype=True) lkind = self.dtype.kind diff --git a/pandas/tests/extension/test_masked.py b/pandas/tests/extension/test_masked.py index e3764b2514680..44a77fec5fc4e 100644 --- a/pandas/tests/extension/test_masked.py +++ b/pandas/tests/extension/test_masked.py @@ -362,7 +362,15 @@ def check_accumulate(self, ser: pd.Series, op_name: str, skipna: bool): tm.assert_series_equal(result, expected) def test_loc_setitem_with_expansion_preserves_ea_index_dtype(self, data, request): - if data.dtype.kind == "b": - mark = pytest.mark.xfail(reason="GH#62344 incorrectly casts to object") - request.applymarker(mark) super().test_loc_setitem_with_expansion_preserves_ea_index_dtype(data) + + +@pytest.mark.parametrize( + "arr", [pd.array([True, False]), pd.array([1, 2]), pd.array([1.0, 2.0])] +) +def test_cast_pointwise_result_all_na_respects_original_dtype(arr): + # GH#62344 + values = [pd.NA, pd.NA] + result = arr._cast_pointwise_result(values) + assert result.dtype == arr.dtype + assert all(x is pd.NA for x in result)

AltStyle によって変換されたページ (->オリジナル) /