Skip to content

Commit fa0e405

Browse files
authored
CLN: avoid try/except in Index methods (pandas-dev#37990)
1 parent fe97aa2 commit fa0e405

File tree

2 files changed

+33
-40
lines changed

2 files changed

+33
-40
lines changed

pandas/core/indexes/base.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -2490,12 +2490,10 @@ def _get_unique_index(self, dropna: bool = False):
24902490
else:
24912491
values = self._values
24922492

2493-
if dropna:
2494-
try:
2495-
if self.hasnans:
2496-
values = values[~isna(values)]
2497-
except NotImplementedError:
2498-
pass
2493+
if dropna and not isinstance(self, ABCMultiIndex):
2494+
# isna not defined for MultiIndex
2495+
if self.hasnans:
2496+
values = values[~isna(values)]
24992497

25002498
return self._shallow_copy(values)
25012499

pandas/core/indexes/datetimelike.py

+29-34
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from pandas.core import algorithms
2828
from pandas.core.arrays import DatetimeArray, PeriodArray, TimedeltaArray
2929
from pandas.core.arrays.datetimelike import DatetimeLikeArrayMixin
30-
from pandas.core.base import IndexOpsMixin
3130
import pandas.core.common as com
3231
import pandas.core.indexes.base as ibase
3332
from pandas.core.indexes.base import Index, _index_shared_docs
@@ -217,10 +216,6 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs):
217216
result._data._freq = freq
218217
return result
219218

220-
@doc(IndexOpsMixin.searchsorted, klass="Datetime-like Index")
221-
def searchsorted(self, value, side="left", sorter=None):
222-
return self._data.searchsorted(value, side=side, sorter=sorter)
223-
224219
_can_hold_na = True
225220

226221
_na_value = NaT
@@ -256,23 +251,23 @@ def min(self, axis=None, skipna=True, *args, **kwargs):
256251
return self._na_value
257252

258253
i8 = self.asi8
259-
try:
254+
255+
if len(i8) and self.is_monotonic_increasing:
260256
# quick check
261-
if len(i8) and self.is_monotonic:
262-
if i8[0] != iNaT:
263-
return self._data._box_func(i8[0])
264-
265-
if self.hasnans:
266-
if skipna:
267-
min_stamp = self[~self._isnan].asi8.min()
268-
else:
269-
return self._na_value
270-
else:
271-
min_stamp = i8.min()
272-
return self._data._box_func(min_stamp)
273-
except ValueError:
257+
if i8[0] != iNaT:
258+
return self._data._box_func(i8[0])
259+
260+
if self.hasnans:
261+
if not skipna:
262+
return self._na_value
263+
i8 = i8[~self._isnan]
264+
265+
if not len(i8):
274266
return self._na_value
275267

268+
min_stamp = i8.min()
269+
return self._data._box_func(min_stamp)
270+
276271
def argmin(self, axis=None, skipna=True, *args, **kwargs):
277272
"""
278273
Returns the indices of the minimum values along an axis.
@@ -313,23 +308,23 @@ def max(self, axis=None, skipna=True, *args, **kwargs):
313308
return self._na_value
314309

315310
i8 = self.asi8
316-
try:
311+
312+
if len(i8) and self.is_monotonic:
317313
# quick check
318-
if len(i8) and self.is_monotonic:
319-
if i8[-1] != iNaT:
320-
return self._data._box_func(i8[-1])
321-
322-
if self.hasnans:
323-
if skipna:
324-
max_stamp = self[~self._isnan].asi8.max()
325-
else:
326-
return self._na_value
327-
else:
328-
max_stamp = i8.max()
329-
return self._data._box_func(max_stamp)
330-
except ValueError:
314+
if i8[-1] != iNaT:
315+
return self._data._box_func(i8[-1])
316+
317+
if self.hasnans:
318+
if not skipna:
319+
return self._na_value
320+
i8 = i8[~self._isnan]
321+
322+
if not len(i8):
331323
return self._na_value
332324

325+
max_stamp = i8.max()
326+
return self._data._box_func(max_stamp)
327+
333328
def argmax(self, axis=None, skipna=True, *args, **kwargs):
334329
"""
335330
Returns the indices of the maximum values along an axis.
@@ -463,7 +458,7 @@ def _partial_date_slice(
463458
vals = self._data._ndarray
464459
unbox = self._data._unbox
465460

466-
if self.is_monotonic:
461+
if self.is_monotonic_increasing:
467462

468463
if len(self) and (
469464
(t1 < self[0] and t2 < self[0]) or (t1 > self[-1] and t2 > self[-1])

0 commit comments

Comments
 (0)