@@ -1031,7 +1031,7 @@ def __setitem__(self, key, value):
10311031 try :
10321032 self ._where (~ key , value , inplace = True )
10331033 except InvalidIndexError :
1034- self ._set_values ( key . astype ( np . bool_ ), value )
1034+ self .iloc [ key ] = value
10351035 return
10361036
10371037 else :
@@ -1049,8 +1049,10 @@ def _set_with_engine(self, key, value):
10491049 def _set_with (self , key , value ):
10501050 # other: fancy integer or otherwise
10511051 if isinstance (key , slice ):
1052+ # extract_array so that if we set e.g. ser[-5:] = ser[:5]
1053+ # we get the first five values, and not 5 NaNs
10521054 indexer = self .index ._convert_slice_indexer (key , kind = "getitem" )
1053- return self ._set_values ( indexer , value )
1055+ self .iloc [ indexer ] = extract_array ( value , extract_numpy = True )
10541056
10551057 else :
10561058 assert not isinstance (key , tuple )
@@ -1068,25 +1070,11 @@ def _set_with(self, key, value):
10681070 # should be caught by the is_bool_indexer check in __setitem__
10691071 if key_type == "integer" :
10701072 if not self .index ._should_fallback_to_positional ():
1071- self ._set_labels ( key , value )
1073+ self .loc [ key ] = value
10721074 else :
1073- self ._set_values ( key , value )
1075+ self .iloc [ key ] = value
10741076 else :
1075- self ._set_labels (key , value )
1076-
1077- def _set_labels (self , key , value ):
1078- key = com .asarray_tuplesafe (key )
1079- indexer : np .ndarray = self .index .get_indexer (key )
1080- mask = indexer == - 1
1081- if mask .any ():
1082- raise ValueError (f"{ key [mask ]} not contained in the index" )
1083- self ._set_values (indexer , value )
1084-
1085- def _set_values (self , key , value ):
1086- if isinstance (key , Series ):
1087- key = key ._values
1088- self ._mgr = self ._mgr .setitem (indexer = key , value = value )
1089- self ._maybe_update_cacher ()
1077+ self .loc [key ] = value
10901078
10911079 def _set_value (self , label , value , takeable : bool = False ):
10921080 """
0 commit comments