diff --git a/python/pyarrow/array.pxi b/python/pyarrow/array.pxi index e090b1d0b3d..ddd97dcdd7f 100644 --- a/python/pyarrow/array.pxi +++ b/python/pyarrow/array.pxi @@ -5384,7 +5384,8 @@ cdef object get_values(object obj, bint* is_pandas_object): is_pandas_object[0] = False else: result = pandas_api.get_values(pandas_api.series(obj, copy=False)) - is_pandas_object[0] = False + # pandas ExtensionArrays (e.g. pd.array(...)) get pandas semantics + is_pandas_object[0] = pandas_api.is_extension_array_dtype(obj) return result diff --git a/python/pyarrow/tests/test_array.py b/python/pyarrow/tests/test_array.py index 63c0eb0bea4..8d442eae762 100644 --- a/python/pyarrow/tests/test_array.py +++ b/python/pyarrow/tests/test_array.py @@ -2631,6 +2631,17 @@ def test_pandas_null_sentinels_index(): assert result.equals(expected) +@pytest.mark.pandas +def test_pandas_null_sentinels_extension_array(): + # GH-35721 - pandas ExtensionArrays should use "from_pandas" semantics + import pandas as pd + arr = pd.array([1.2, np.nan], dtype=float) + result = pa.array(arr) + expected = pa.array([1.2, np.nan], from_pandas=True) + assert result.equals(expected) + assert result.null_count == 1 + + @pytest.mark.numpy def test_array_roundtrip_from_numpy_datetimeD(): arr = np.array([None, datetime.date(2017, 4, 4)], dtype='datetime64[D]')