@@ -970,14 +970,15 @@ def __setitem__(self, key, value):
970
970
key = com .apply_if_callable (key , self )
971
971
cacher_needs_updating = self ._check_is_chained_assignment_possible ()
972
972
973
+ if key is Ellipsis :
974
+ key = slice (None )
975
+
973
976
try :
974
977
self ._set_with_engine (key , value )
975
978
except (KeyError , ValueError ):
976
979
values = self ._values
977
980
if is_integer (key ) and not self .index .inferred_type == "integer" :
978
981
values [key ] = value
979
- elif key is Ellipsis :
980
- self [:] = value
981
982
else :
982
983
self .loc [key ] = value
983
984
@@ -995,9 +996,10 @@ def __setitem__(self, key, value):
995
996
self ._where (~ key , value , inplace = True )
996
997
return
997
998
except InvalidIndexError :
998
- pass
999
+ self . _set_values ( key . astype ( np . bool_ ), value )
999
1000
1000
- self ._set_with (key , value )
1001
+ else :
1002
+ self ._set_with (key , value )
1001
1003
1002
1004
if cacher_needs_updating :
1003
1005
self ._maybe_update_cacher ()
@@ -1038,13 +1040,13 @@ def _set_with(self, key, value):
1038
1040
else :
1039
1041
key_type = lib .infer_dtype (key , skipna = False )
1040
1042
1043
+ # Note: key_type == "boolean" should not occur because that
1044
+ # should be caught by the is_bool_indexer check in __setitem__
1041
1045
if key_type == "integer" :
1042
1046
if self .index .inferred_type == "integer" :
1043
1047
self ._set_labels (key , value )
1044
1048
else :
1045
1049
return self ._set_values (key , value )
1046
- elif key_type == "boolean" :
1047
- self ._set_values (key .astype (np .bool_ ), value )
1048
1050
else :
1049
1051
self ._set_labels (key , value )
1050
1052
0 commit comments