Skip to content

Commit f652994

Browse files
authored
REF: simplify Series.__setitem__ (#41912)
1 parent 7ff396d commit f652994

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

pandas/core/series.py

+21-25
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,10 @@ def __setitem__(self, key, value) -> None:
10611061
if key is Ellipsis:
10621062
key = slice(None)
10631063

1064+
if isinstance(key, slice):
1065+
indexer = self.index._convert_slice_indexer(key, kind="getitem")
1066+
return self._set_values(indexer, value)
1067+
10641068
try:
10651069
self._set_with_engine(key, value)
10661070
except (KeyError, ValueError):
@@ -1074,6 +1078,7 @@ def __setitem__(self, key, value) -> None:
10741078

10751079
except (InvalidIndexError, TypeError) as err:
10761080
if isinstance(key, tuple) and not isinstance(self.index, MultiIndex):
1081+
# cases with MultiIndex don't get here bc they raise KeyError
10771082
raise KeyError(
10781083
"key of type tuple not found and not a MultiIndex"
10791084
) from err
@@ -1102,34 +1107,25 @@ def _set_with_engine(self, key, value) -> None:
11021107

11031108
def _set_with(self, key, value):
11041109
# other: fancy integer or otherwise
1105-
if isinstance(key, slice):
1106-
indexer = self.index._convert_slice_indexer(key, kind="getitem")
1107-
return self._set_values(indexer, value)
1108-
1109-
else:
1110-
assert not isinstance(key, tuple)
1110+
assert not isinstance(key, tuple)
11111111

1112-
if is_scalar(key):
1113-
key = [key]
1114-
elif is_iterator(key):
1115-
# Without this, the call to infer_dtype will consume the generator
1116-
key = list(key)
1112+
if is_scalar(key):
1113+
key = [key]
1114+
elif is_iterator(key):
1115+
# Without this, the call to infer_dtype will consume the generator
1116+
key = list(key)
11171117

1118-
if isinstance(key, Index):
1119-
key_type = key.inferred_type
1120-
key = key._values
1121-
else:
1122-
key_type = lib.infer_dtype(key, skipna=False)
1118+
key_type = lib.infer_dtype(key, skipna=False)
11231119

1124-
# Note: key_type == "boolean" should not occur because that
1125-
# should be caught by the is_bool_indexer check in __setitem__
1126-
if key_type == "integer":
1127-
if not self.index._should_fallback_to_positional:
1128-
self._set_labels(key, value)
1129-
else:
1130-
self._set_values(key, value)
1120+
# Note: key_type == "boolean" should not occur because that
1121+
# should be caught by the is_bool_indexer check in __setitem__
1122+
if key_type == "integer":
1123+
if not self.index._should_fallback_to_positional:
1124+
self._set_labels(key, value)
11311125
else:
1132-
self.loc[key] = value
1126+
self._set_values(key, value)
1127+
else:
1128+
self.loc[key] = value
11331129

11341130
def _set_labels(self, key, value) -> None:
11351131
key = com.asarray_tuplesafe(key)
@@ -1140,7 +1136,7 @@ def _set_labels(self, key, value) -> None:
11401136
self._set_values(indexer, value)
11411137

11421138
def _set_values(self, key, value) -> None:
1143-
if isinstance(key, Series):
1139+
if isinstance(key, (Index, Series)):
11441140
key = key._values
11451141

11461142
self._mgr = self._mgr.setitem(indexer=key, value=value)

0 commit comments

Comments
 (0)