@@ -3211,12 +3211,16 @@ def _setitem_frame(self, key, value):
3211
3211
self ._check_setitem_copy ()
3212
3212
self ._where (- key , value , inplace = True )
3213
3213
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 ):
3215
3219
3216
3220
# technically _sanitize_column expects a label, not a position,
3217
3221
# 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 )
3220
3224
3221
3225
# check if we are modifying a copy
3222
3226
# try to set first as we want an invalid
@@ -3235,7 +3239,14 @@ def _set_item(self, key, value):
3235
3239
ensure homogeneity.
3236
3240
"""
3237
3241
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 )
3239
3250
3240
3251
# check if we are modifying a copy
3241
3252
# try to set first as we want an invalid
0 commit comments