diff --git a/pandas/core/arrays/arrow/array.py b/pandas/core/arrays/arrow/array.py index b8dd44a58e8ec..05efe975d0a2c 100644 --- a/pandas/core/arrays/arrow/array.py +++ b/pandas/core/arrays/arrow/array.py @@ -569,6 +569,7 @@ def _box_pa_array( ------- pa.Array or pa.ChunkedArray """ + value = extract_array(value, extract_numpy=True) if isinstance(value, cls): pa_array = value._pa_array elif isinstance(value, (pa.Array, pa.ChunkedArray)): diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 17aaf6a4b1108..ddb58ecbfa6f3 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -8,6 +8,7 @@ from pandas.compat import pa_version_under16p0 from pandas.errors import IndexingError +import pandas.util._test_decorators as td from pandas import ( NA, @@ -1535,3 +1536,15 @@ def test_iloc_arrow_extension_array(self): expected = df.iloc[:, df["c"]] result = df_arrow.iloc[:, df_arrow["c"]] tm.assert_frame_equal(result, expected, check_dtype=False) + + @td.skip_if_no("pyarrow") + def test_setitem_pyarrow_int_series(self): + # GH#62462 + ser = Series([1, 2, 3], dtype="int64[pyarrow]") + idx = Index([0, 1]) + vals = Series([7, 8], dtype="int64[pyarrow]") + + ser.iloc[idx] = vals + + expected = Series([7, 8, 3], dtype="int64[pyarrow]") + tm.assert_series_equal(ser, expected)