@@ -642,36 +642,30 @@ def get_loc(self, key, method=None, tolerance=None):
642
642
-------
643
643
loc : int
644
644
"""
645
- try :
646
- return self ._engine .get_loc (key )
647
- except KeyError :
648
- if is_integer (key ):
649
- raise
650
-
651
- try :
652
- asdt , parsed , reso = parse_time_string (key , self .freq )
653
- key = asdt
654
- except TypeError :
655
- pass
656
- except DateParseError :
657
- # A string with invalid format
658
- raise KeyError (f"Cannot interpret '{ key } ' as period" )
645
+ if is_integer (key ) or (is_float (key ) and not isna (key )):
646
+ ordinal = key
647
+ else :
648
+ if isinstance (key , str ):
649
+ try :
650
+ key , parsed , reso = parse_time_string (key , self .freq )
651
+ except DateParseError :
652
+ # A string with invalid format
653
+ raise KeyError (f"Cannot interpret '{ key } ' as period" )
659
654
660
655
try :
661
656
key = Period (key , freq = self .freq )
657
+ ordinal = iNaT if key is NaT else key .ordinal
662
658
except ValueError :
663
- # we cannot construct the Period
664
- # as we have an invalid type
665
- raise KeyError (key )
659
+ # we cannot construct the Period as we have an invalid type
660
+ raise TypeError (f"'{ key } ' is an invalid key" )
666
661
667
- try :
668
- ordinal = iNaT if key is NaT else key .ordinal
669
- if tolerance is not None :
670
- tolerance = self ._convert_tolerance (tolerance , np .asarray (key ))
671
- return self ._int64index .get_loc (ordinal , method , tolerance )
662
+ if tolerance is not None :
663
+ tolerance = self ._convert_tolerance (tolerance , np .asarray (key ))
672
664
673
- except KeyError :
674
- raise KeyError (key )
665
+ try :
666
+ return self ._int64index .get_loc (ordinal , method , tolerance )
667
+ except KeyError :
668
+ raise KeyError (key )
675
669
676
670
def _maybe_cast_slice_bound (self , label , side , kind ):
677
671
"""
0 commit comments