diff --git a/pandas/core/series.py b/pandas/core/series.py index 12164a4b8ff6b..e3f4261eb0b73 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -978,14 +978,15 @@ def __setitem__(self, key, value): key = com.apply_if_callable(key, self) cacher_needs_updating = self._check_is_chained_assignment_possible() + if key is Ellipsis: + key = slice(None) + try: self._set_with_engine(key, value) except (KeyError, ValueError): values = self._values if is_integer(key) and not self.index.inferred_type == "integer": values[key] = value - elif key is Ellipsis: - self[:] = value else: self.loc[key] = value @@ -1003,9 +1004,10 @@ def __setitem__(self, key, value): self._where(~key, value, inplace=True) return except InvalidIndexError: - pass + self._set_values(key.astype(np.bool_), value) - self._set_with(key, value) + else: + self._set_with(key, value) if cacher_needs_updating: self._maybe_update_cacher() @@ -1046,13 +1048,13 @@ def _set_with(self, key, value): else: key_type = lib.infer_dtype(key, skipna=False) + # Note: key_type == "boolean" should not occur because that + # should be caught by the is_bool_indexer check in __setitem__ if key_type == "integer": if self.index.inferred_type == "integer": self._set_labels(key, value) else: return self._set_values(key, value) - elif key_type == "boolean": - self._set_values(key.astype(np.bool_), value) else: self._set_labels(key, value)