diff --git a/pandas/core/arrays/arrow/array.py b/pandas/core/arrays/arrow/array.py index b8dd44a58e8ec..82f95687832a9 100644 --- a/pandas/core/arrays/arrow/array.py +++ b/pandas/core/arrays/arrow/array.py @@ -1051,7 +1051,7 @@ def _arith_method(self, other, op) -> Self | npt.NDArray[np.object_]: result = self._evaluate_op_method(other, op, ARROW_ARITHMETIC_FUNCS) if is_nan_na() and result.dtype.kind == "f": parr = result._pa_array - mask = pc.is_nan(parr).to_numpy() + mask = pc.is_nan(parr).fill_null(False).to_numpy() arr = pc.replace_with_mask(parr, mask, pa.scalar(None, type=parr.type)) result = type(self)(arr) return result diff --git a/pandas/tests/extension/test_arrow.py b/pandas/tests/extension/test_arrow.py index d2d65c4b983a7..c810f098f15cf 100644 --- a/pandas/tests/extension/test_arrow.py +++ b/pandas/tests/extension/test_arrow.py @@ -3691,3 +3691,12 @@ def test_setitem_float_nan_is_na(using_nan_is_na): ser[2] = np.nan assert isinstance(ser[2], float) assert np.isnan(ser[2]) + + +def test_pow_with_all_na_float(): + # GH#62520 + + s = pd.Series([None, None], dtype="float64[pyarrow]") + result = s.pow(2) + expected = pd.Series([pd.NA, pd.NA], dtype="float64[pyarrow]") + tm.assert_series_equal(result, expected)