diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 87ab0d94a7ce0..a9919f8f2e290 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2106,7 +2106,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):