diff --git a/doc/source/whatsnew/v2.0.2.rst b/doc/source/whatsnew/v2.0.2.rst index a39d68a2f8ae9..373612762cb69 100644 --- a/doc/source/whatsnew/v2.0.2.rst +++ b/doc/source/whatsnew/v2.0.2.rst @@ -25,6 +25,7 @@ Fixed regressions Bug fixes ~~~~~~~~~ +- Bug in :class:`.arrays.ArrowExtensionArray` incorrectly assigning ``dict`` instead of ``list`` for ``.type`` with ``pyarrow.map_`` and raising a ``NotImplementedError`` with ``pyarrow.struct`` (:issue:`53328`) - Bug in :func:`api.interchange.from_dataframe` was raising ``IndexError`` on empty categorical data (:issue:`53077`) - Bug in :func:`api.interchange.from_dataframe` was returning :class:`DataFrame`'s of incorrect sizes when called on slices (:issue:`52824`) - Bug in :func:`api.interchange.from_dataframe` was unnecessarily raising on bitmasks (:issue:`49888`) diff --git a/pandas/core/arrays/arrow/dtype.py b/pandas/core/arrays/arrow/dtype.py index 20a9902f3bc90..7d4fbb788cc9c 100644 --- a/pandas/core/arrays/arrow/dtype.py +++ b/pandas/core/arrays/arrow/dtype.py @@ -140,6 +140,8 @@ def type(self): elif pa.types.is_list(pa_type) or pa.types.is_large_list(pa_type): return list elif pa.types.is_map(pa_type): + return list + elif pa.types.is_struct(pa_type): return dict elif pa.types.is_null(pa_type): # TODO: None? pd.NA? pa.null? diff --git a/pandas/tests/extension/test_arrow.py b/pandas/tests/extension/test_arrow.py index fdff9dd873fec..8907137c71844 100644 --- a/pandas/tests/extension/test_arrow.py +++ b/pandas/tests/extension/test_arrow.py @@ -1580,7 +1580,8 @@ def test_mode_dropna_false_mode_na(data): [pa.large_string(), str], [pa.list_(pa.int64()), list], [pa.large_list(pa.int64()), list], - [pa.map_(pa.string(), pa.int64()), dict], + [pa.map_(pa.string(), pa.int64()), list], + [pa.struct([("f1", pa.int8()), ("f2", pa.string())]), dict], [pa.dictionary(pa.int64(), pa.int64()), CategoricalDtypeType], ], )