Skip to content

Commit fff4f3f

Browse files
jbrockmendeljreback
authored andcommitted
REF: avoid calling engine for EA values (#31258)
1 parent 351760c commit fff4f3f

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

pandas/core/frame.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2892,14 +2892,17 @@ def _get_value(self, index, col, takeable: bool = False):
28922892
engine = self.index._engine
28932893

28942894
try:
2895-
return engine.get_value(series._values, index)
2895+
if isinstance(series._values, np.ndarray):
2896+
# i.e. not EA, we can use engine
2897+
return engine.get_value(series._values, index)
2898+
else:
2899+
loc = series.index.get_loc(index)
2900+
return series._values[loc]
28962901
except KeyError:
28972902
# GH 20629
28982903
if self.index.nlevels > 1:
28992904
# partial indexing forbidden
29002905
raise
2901-
except (TypeError, ValueError):
2902-
pass
29032906

29042907
# we cannot handle direct indexing
29052908
# use positional

pandas/core/indexing.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,8 +2101,7 @@ def __setitem__(self, key, value):
21012101
if len(key) != self.ndim:
21022102
raise ValueError("Not enough indexers for scalar access (setting)!")
21032103
key = list(self._convert_key(key, is_setter=True))
2104-
key.append(value)
2105-
self.obj._set_value(*key, takeable=self._takeable)
2104+
self.obj._set_value(*key, value=value, takeable=self._takeable)
21062105

21072106

21082107
@Appender(IndexingMixin.at.__doc__)

pandas/core/series.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,9 +1060,12 @@ def _set_value(self, label, value, takeable: bool = False):
10601060
try:
10611061
if takeable:
10621062
self._values[label] = value
1063-
else:
1063+
elif isinstance(self._values, np.ndarray):
1064+
# i.e. not EA, so we can use _engine
10641065
self.index._engine.set_value(self._values, label, value)
1065-
except (KeyError, TypeError):
1066+
else:
1067+
self.loc[label] = value
1068+
except KeyError:
10661069

10671070
# set using a non-recursive method
10681071
self.loc[label] = value

0 commit comments

Comments
 (0)