diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 9bfbc22b1e628..3ef4666402d9a 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1821,7 +1821,7 @@ def _setitem_single_block(self, indexer, value, name: str): return indexer = maybe_convert_ix(*indexer) - if isinstance(value, ABCSeries) and name != "iloc" or isinstance(value, dict): + if (isinstance(value, ABCSeries) and name != "iloc") or isinstance(value, dict): # TODO(EA): ExtensionBlock.setitem this causes issues with # setting for extensionarrays that store dicts. Need to decide # if it's worth supporting that. @@ -1859,6 +1859,7 @@ def _setitem_with_indexer_missing(self, indexer, value): if index.is_unique: new_indexer = index.get_indexer([new_index[-1]]) if (new_indexer != -1).any(): + # We get only here with loc, so can hard code return self._setitem_with_indexer(new_indexer, value, "loc") # this preserves dtype of the value diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 84073bbb023a8..bc40079e3169b 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -818,7 +818,7 @@ def test_iloc_setitem_bool_indexer(self, klass): tm.assert_frame_equal(df, expected) @pytest.mark.parametrize("indexer", [[1], slice(1, 2)]) - def test_setitem_iloc_pure_position_based(self, indexer): + def test_iloc_setitem_pure_position_based(self, indexer): # GH#22046 df1 = DataFrame({"a2": [11, 12, 13], "b2": [14, 15, 16]}) df2 = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}) @@ -826,7 +826,7 @@ def test_setitem_iloc_pure_position_based(self, indexer): expected = DataFrame({"a": [1, 2, 3], "b": [11, 12, 13], "c": [7, 8, 9]}) tm.assert_frame_equal(df2, expected) - def test_setitem_iloc_dictionary_value(self): + def test_iloc_setitem_dictionary_value(self): # GH#37728 df = DataFrame({"x": [1, 2], "y": [2, 2]}) rhs = dict(x=9, y=99) @@ -1000,7 +1000,7 @@ def test_iloc_getitem_nonunique(self): ser = Series([0, 1, 2], index=[0, 1, 0]) assert ser.iloc[2] == 2 - def test_setitem_iloc_pure_position_based(self): + def test_iloc_setitem_pure_position_based(self): # GH#22046 ser1 = Series([1, 2, 3]) ser2 = Series([4, 5, 6], index=[1, 0, 2])