diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 60179b69f56a4..ad5f878628931 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1697,6 +1697,10 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): # We get here in one case via .loc with a all-False mask pass + elif self._is_scalar_access(indexer): + # We are setting nested data + self._setitem_single_column(indexer[1], value, pi) + elif len(ilocs) == len(value): # We are setting multiple columns in a single row. for loc, v in zip(ilocs, value): diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index 79c0aad66229c..c4f6aff049ea3 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -44,7 +44,6 @@ ) from pandas.core.dtypes.generic import ( ABCDataFrame, - ABCPandasArray, ABCSeries, ) from pandas.core.dtypes.inference import is_inferred_bool_dtype @@ -85,6 +84,7 @@ from pandas.core.internals.blocks import ( ensure_block_shape, external_values, + extract_pandas_array, maybe_coerce_values, new_block, to_native_types, @@ -399,6 +399,8 @@ def convert( ) -> T: def _convert(arr): if is_object_dtype(arr.dtype): + # extract PandasArray for tests that patch PandasArray._typ + arr = np.asarray(arr) return soft_convert_objects( arr, datetime=datetime, @@ -697,6 +699,7 @@ def __init__( if verify_integrity: self._axes = [ensure_index(ax) for ax in axes] + arrays = [extract_pandas_array(x, None, 1)[0] for x in arrays] self.arrays = [maybe_coerce_values(arr) for arr in arrays] self._verify_integrity() @@ -1183,8 +1186,7 @@ def __init__( self._axes = [ensure_index(ax) for ax in self._axes] arr = arrays[0] arr = maybe_coerce_values(arr) - if isinstance(arr, ABCPandasArray): - arr = arr.to_numpy() + arr = extract_pandas_array(arr, None, 1)[0] self.arrays = [arr] self._verify_integrity() diff --git a/pandas/tests/extension/test_numpy.py b/pandas/tests/extension/test_numpy.py index ed26bf6481bd9..e963cfec71b5b 100644 --- a/pandas/tests/extension/test_numpy.py +++ b/pandas/tests/extension/test_numpy.py @@ -16,8 +16,6 @@ import numpy as np import pytest -import pandas.util._test_decorators as td - from pandas.core.dtypes.cast import can_hold_element from pandas.core.dtypes.dtypes import ( ExtensionDtype, @@ -30,9 +28,6 @@ from pandas.core.internals import blocks from pandas.tests.extension import base -# TODO(ArrayManager) PandasArray -pytestmark = td.skip_array_manager_not_yet_implemented - def _can_hold_element_patched(obj, element) -> bool: if isinstance(element, PandasArray): @@ -349,26 +344,6 @@ def test_setitem_sequence_broadcasts(self, data, box_in_series): # length than the value super().test_setitem_sequence_broadcasts(data, box_in_series) - @skip_nested - def test_setitem_loc_scalar_mixed(self, data): - # AssertionError - super().test_setitem_loc_scalar_mixed(data) - - @skip_nested - def test_setitem_loc_scalar_multiple_homogoneous(self, data): - # AssertionError - super().test_setitem_loc_scalar_multiple_homogoneous(data) - - @skip_nested - def test_setitem_iloc_scalar_mixed(self, data): - # AssertionError - super().test_setitem_iloc_scalar_mixed(data) - - @skip_nested - def test_setitem_iloc_scalar_multiple_homogoneous(self, data): - # AssertionError - super().test_setitem_iloc_scalar_multiple_homogoneous(data) - @skip_nested @pytest.mark.parametrize("setter", ["loc", None]) def test_setitem_mask_broadcast(self, data, setter):