@@ -3211,12 +3211,16 @@ def _setitem_frame(self, key, value):
32113211 self ._check_setitem_copy ()
32123212 self ._where (- key , value , inplace = True )
32133213
3214- def _iset_item (self , loc : int , value ):
3214+ def _iset_item_mgr (self , loc : int , value ) -> None :
3215+ self ._mgr .iset (loc , value )
3216+ self ._clear_item_cache ()
3217+
3218+ def _iset_item (self , loc : int , value , broadcast : bool = False ):
32153219
32163220 # technically _sanitize_column expects a label, not a position,
32173221 # but the behavior is the same as long as we pass broadcast=False
3218- value = self ._sanitize_column (loc , value , broadcast = False )
3219- NDFrame . _iset_item ( self , loc , value )
3222+ value = self ._sanitize_column (loc , value , broadcast = broadcast )
3223+ self . _iset_item_mgr ( loc , value )
32203224
32213225 # check if we are modifying a copy
32223226 # try to set first as we want an invalid
@@ -3235,7 +3239,14 @@ def _set_item(self, key, value):
32353239 ensure homogeneity.
32363240 """
32373241 value = self ._sanitize_column (key , value )
3238- NDFrame ._set_item (self , key , value )
3242+
3243+ try :
3244+ loc = self ._info_axis .get_loc (key )
3245+ except KeyError :
3246+ # This item wasn't present, just insert at end
3247+ self ._mgr .insert (len (self ._info_axis ), key , value )
3248+ else :
3249+ self ._iset_item_mgr (loc , value )
32393250
32403251 # check if we are modifying a copy
32413252 # try to set first as we want an invalid
0 commit comments