Skip to content

Commit 030a35c

Browse files
jbrockmendeljreback
authored andcommitted
PERF: RangeIndex.get_loc (pandas-dev#30930)
1 parent ef0cf1e commit 030a35c

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

pandas/core/indexes/range.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from pandas.core.dtypes.common import (
1515
ensure_platform_int,
1616
ensure_python_int,
17+
is_float,
1718
is_integer,
1819
is_integer_dtype,
1920
is_list_like,
@@ -344,12 +345,14 @@ def __contains__(self, key: Union[int, np.integer]) -> bool:
344345

345346
@Appender(_index_shared_docs["get_loc"])
346347
def get_loc(self, key, method=None, tolerance=None):
347-
if is_integer(key) and method is None and tolerance is None:
348-
new_key = int(key)
349-
try:
350-
return self._range.index(new_key)
351-
except ValueError:
352-
raise KeyError(key)
348+
if method is None and tolerance is None:
349+
if is_integer(key) or (is_float(key) and key.is_integer()):
350+
new_key = int(key)
351+
try:
352+
return self._range.index(new_key)
353+
except ValueError:
354+
raise KeyError(key)
355+
raise KeyError(key)
353356
return super().get_loc(key, method=method, tolerance=tolerance)
354357

355358
@Appender(_index_shared_docs["get_indexer"])

pandas/tests/indexes/ranges/test_range.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -735,8 +735,9 @@ def test_engineless_lookup(self):
735735

736736
assert "_engine" not in idx._cache
737737

738-
# The engine is still required for lookup of a different dtype scalar:
738+
# Different types of scalars can be excluded immediately, no need to
739+
# use the _engine
739740
with pytest.raises(KeyError, match="'a'"):
740-
assert idx.get_loc("a") == -1
741+
idx.get_loc("a")
741742

742-
assert "_engine" in idx._cache
743+
assert "_engine" not in idx._cache

0 commit comments

Comments
 (0)