diff --git a/doc/source/whatsnew/v2.0.0.rst b/doc/source/whatsnew/v2.0.0.rst index 15e3d66ecc551..374a1e43daa11 100644 --- a/doc/source/whatsnew/v2.0.0.rst +++ b/doc/source/whatsnew/v2.0.0.rst @@ -1249,6 +1249,7 @@ Indexing - Bug in :meth:`DataFrame.compare` does not recognize differences when comparing ``NA`` with value in nullable dtypes (:issue:`48939`) - Bug in :meth:`Series.rename` with :class:`MultiIndex` losing extension array dtypes (:issue:`21055`) - Bug in :meth:`DataFrame.isetitem` coercing extension array dtypes in :class:`DataFrame` to object (:issue:`49922`) +- Bug in :meth:`Series.__getitem__` returning corrupt object when selecting from an empty pyarrow backed object (:issue:`51734`) - Bug in :class:`BusinessHour` would cause creation of :class:`DatetimeIndex` to fail when no opening hour was included in the index (:issue:`49835`) Missing diff --git a/pandas/_testing/__init__.py b/pandas/_testing/__init__.py index a82a00d3de70a..f2f0aaffcd6b5 100644 --- a/pandas/_testing/__init__.py +++ b/pandas/_testing/__init__.py @@ -253,6 +253,7 @@ else: FLOAT_PYARROW_DTYPES_STR_REPR = [] ALL_INT_PYARROW_DTYPES_STR_REPR = [] + ALL_PYARROW_DTYPES = [] EMPTY_STRING_PATTERN = re.compile("^$") diff --git a/pandas/core/arrays/arrow/array.py b/pandas/core/arrays/arrow/array.py index ce2ac4213d806..072f21d88f6a5 100644 --- a/pandas/core/arrays/arrow/array.py +++ b/pandas/core/arrays/arrow/array.py @@ -1027,7 +1027,12 @@ def _concat_same_type( ArrowExtensionArray """ chunks = [array for ea in to_concat for array in ea._data.iterchunks()] - arr = pa.chunked_array(chunks) + if to_concat[0].dtype == "string": + # StringDtype has no attrivute pyarrow_dtype + pa_dtype = pa.string() + else: + pa_dtype = to_concat[0].dtype.pyarrow_dtype + arr = pa.chunked_array(chunks, type=pa_dtype) return cls(arr) def _accumulate( diff --git a/pandas/tests/extension/test_arrow.py b/pandas/tests/extension/test_arrow.py index 348e5d9377b9e..f803022142310 100644 --- a/pandas/tests/extension/test_arrow.py +++ b/pandas/tests/extension/test_arrow.py @@ -2319,3 +2319,11 @@ def test_from_sequence_of_strings_boolean(): strings = ["True", "foo"] with pytest.raises(pa.ArrowInvalid, match="Failed to parse"): ArrowExtensionArray._from_sequence_of_strings(strings, dtype=pa.bool_()) + + +def test_concat_empty_arrow_backed_series(dtype): + # GH#51734 + ser = pd.Series([], dtype=dtype) + expected = ser.copy() + result = pd.concat([ser[np.array([], dtype=np.bool_)]]) + tm.assert_series_equal(result, expected)