From dddc5d0b39ec4dcb2c3d723174dfd7d1af966b25 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Sun, 18 Sep 2022 14:42:37 +0200 Subject: [PATCH] REGR: Loc.setitem with enlargement raises for nested data --- pandas/core/indexing.py | 4 +++- pandas/tests/series/indexing/test_indexing.py | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 09737901cbbc6..009c4ecc6bddd 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2102,7 +2102,9 @@ def _setitem_with_indexer_missing(self, indexer, value): return self._setitem_with_indexer(new_indexer, value, "loc") # this preserves dtype of the value and of the object - if is_valid_na_for_dtype(value, self.obj.dtype): + if not is_scalar(value): + new_dtype = None + elif is_valid_na_for_dtype(value, self.obj.dtype): value = na_value_for_dtype(self.obj.dtype, compat=False) new_dtype = maybe_promote(self.obj.dtype, value)[0] elif isna(value): diff --git a/pandas/tests/series/indexing/test_indexing.py b/pandas/tests/series/indexing/test_indexing.py index 5e87e36f21cca..0bab391dab27d 100644 --- a/pandas/tests/series/indexing/test_indexing.py +++ b/pandas/tests/series/indexing/test_indexing.py @@ -358,6 +358,15 @@ def test_loc_boolean_indexer_miss_matching_index(): ser.loc[indexer] +def test_loc_setitem_nested_data_enlargement(): + # GH#48614 + df = DataFrame({"a": [1]}) + ser = Series({"label": df}) + ser.loc["new_label"] = df + expected = Series({"label": df, "new_label": df}) + tm.assert_series_equal(ser, expected) + + class TestDeprecatedIndexers: @pytest.mark.parametrize("key", [{1}, {1: 1}]) def test_getitem_dict_and_set_deprecated(self, key):