Skip to content

Commit cd7c784

Browse files
jbrockmendeljreback
authored andcommitted
CLN: fix wrong types getting passed to TDI._get_string_slice (#30874)
1 parent 998e742 commit cd7c784

File tree

3 files changed

+16
-42
lines changed

3 files changed

+16
-42
lines changed

pandas/core/indexes/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4902,7 +4902,7 @@ def isin(self, values, level=None):
49024902
self._validate_index_level(level)
49034903
return algos.isin(self, values)
49044904

4905-
def _get_string_slice(self, key, use_lhs=True, use_rhs=True):
4905+
def _get_string_slice(self, key: str_t, use_lhs: bool = True, use_rhs: bool = True):
49064906
# this is for partial string indexing,
49074907
# overridden in DatetimeIndex, TimedeltaIndex and PeriodIndex
49084908
raise NotImplementedError

pandas/core/indexes/period.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,8 @@ def _parsed_string_to_bounds(self, reso, parsed):
684684
raise KeyError(reso)
685685
return (t1.asfreq(self.freq, how="start"), t1.asfreq(self.freq, how="end"))
686686

687-
def _get_string_slice(self, key):
687+
def _get_string_slice(self, key: str, use_lhs: bool = True, use_rhs: bool = True):
688+
# TODO: Check for non-True use_lhs/use_rhs
688689
if not self.is_monotonic:
689690
raise ValueError("Partial indexing only valid for ordered time series")
690691

pandas/core/indexes/timedeltas.py

+13-40
Original file line numberDiff line numberDiff line change
@@ -237,25 +237,18 @@ def get_value(self, series, key):
237237
know what you're doing
238238
"""
239239

240-
if _is_convertible_to_td(key):
240+
if isinstance(key, str):
241+
try:
242+
key = Timedelta(key)
243+
except ValueError:
244+
raise KeyError(key)
245+
246+
if isinstance(key, self._data._recognized_scalars) or key is NaT:
241247
key = Timedelta(key)
242248
return self.get_value_maybe_box(series, key)
243249

244-
try:
245-
value = Index.get_value(self, series, key)
246-
except KeyError:
247-
try:
248-
loc = self._get_string_slice(key)
249-
return series[loc]
250-
except (TypeError, ValueError, KeyError):
251-
pass
252-
253-
try:
254-
return self.get_value_maybe_box(series, key)
255-
except (TypeError, ValueError, KeyError):
256-
raise KeyError(key)
257-
else:
258-
return com.maybe_box(self, value, series, key)
250+
value = Index.get_value(self, series, key)
251+
return com.maybe_box(self, value, series, key)
259252

260253
def get_value_maybe_box(self, series, key: Timedelta):
261254
loc = self.get_loc(key)
@@ -288,19 +281,7 @@ def get_loc(self, key, method=None, tolerance=None):
288281
key = Timedelta(key)
289282
return Index.get_loc(self, key, method, tolerance)
290283

291-
try:
292-
return Index.get_loc(self, key, method, tolerance)
293-
except (KeyError, ValueError, TypeError):
294-
try:
295-
return self._get_string_slice(key)
296-
except (TypeError, KeyError, ValueError):
297-
pass
298-
299-
try:
300-
stamp = Timedelta(key)
301-
return Index.get_loc(self, stamp, method, tolerance)
302-
except (KeyError, ValueError):
303-
raise KeyError(key)
284+
return Index.get_loc(self, key, method, tolerance)
304285

305286
def _maybe_cast_slice_bound(self, label, side, kind):
306287
"""
@@ -330,18 +311,10 @@ def _maybe_cast_slice_bound(self, label, side, kind):
330311

331312
return label
332313

333-
def _get_string_slice(self, key):
334-
if is_integer(key) or is_float(key) or key is NaT:
335-
self._invalid_indexer("slice", key)
336-
loc = self._partial_td_slice(key)
337-
return loc
338-
339-
def _partial_td_slice(self, key):
340-
314+
def _get_string_slice(self, key: str, use_lhs: bool = True, use_rhs: bool = True):
315+
# TODO: Check for non-True use_lhs/use_rhs
316+
assert isinstance(key, str), type(key)
341317
# given a key, try to figure out a location for a partial slice
342-
if not isinstance(key, str):
343-
return key
344-
345318
raise NotImplementedError
346319

347320
def is_type_compatible(self, typ) -> bool:

0 commit comments

Comments
 (0)