Skip to content

Commit 0469d1e

Browse files
authored
REF: simplify __can_partial_date_slice, _parsed_string_to_bounds (#42258)
1 parent 0283df6 commit 0469d1e

File tree

2 files changed

+7
-30
lines changed

2 files changed

+7
-30
lines changed

pandas/core/indexes/datetimes.py

+5-20
Original file line numberDiff line numberDiff line change
@@ -567,21 +567,6 @@ def _parsed_string_to_bounds(self, reso: Resolution, parsed: datetime):
567567
-------
568568
lower, upper: pd.Timestamp
569569
"""
570-
assert isinstance(reso, Resolution), (type(reso), reso)
571-
valid_resos = {
572-
"year",
573-
"month",
574-
"quarter",
575-
"day",
576-
"hour",
577-
"minute",
578-
"second",
579-
"millisecond",
580-
"microsecond",
581-
}
582-
if reso.attrname not in valid_resos:
583-
raise KeyError
584-
585570
grp = reso.freq_group
586571
per = Period(parsed, freq=grp.value)
587572
start, end = per.start_time, per.end_time
@@ -590,17 +575,17 @@ def _parsed_string_to_bounds(self, reso: Resolution, parsed: datetime):
590575
# If an incoming date string contained a UTC offset, need to localize
591576
# the parsed date to this offset first before aligning with the index's
592577
# timezone
578+
start = start.tz_localize(parsed.tzinfo)
579+
end = end.tz_localize(parsed.tzinfo)
580+
593581
if parsed.tzinfo is not None:
594582
if self.tz is None:
595583
raise ValueError(
596584
"The index must be timezone aware when indexing "
597585
"with a date string with a UTC offset"
598586
)
599-
start = start.tz_localize(parsed.tzinfo).tz_convert(self.tz)
600-
end = end.tz_localize(parsed.tzinfo).tz_convert(self.tz)
601-
elif self.tz is not None:
602-
start = start.tz_localize(self.tz)
603-
end = end.tz_localize(self.tz)
587+
start = self._maybe_cast_for_get_loc(start)
588+
end = self._maybe_cast_for_get_loc(end)
604589
return start, end
605590

606591
def _can_partial_date_slice(self, reso: Resolution) -> bool:

pandas/core/indexes/period.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -510,16 +510,8 @@ def _parsed_string_to_bounds(self, reso: Resolution, parsed: datetime):
510510

511511
def _can_partial_date_slice(self, reso: Resolution) -> bool:
512512
assert isinstance(reso, Resolution), (type(reso), reso)
513-
grp = reso.freq_group
514-
freqn = self.dtype.freq_group_code
515-
516-
if not grp.value < freqn:
517-
# TODO: we used to also check for
518-
# reso in ["day", "hour", "minute", "second"]
519-
# why is that check not needed?
520-
return False
521-
522-
return True
513+
# e.g. test_getitem_setitem_periodindex
514+
return reso > self.dtype.resolution
523515

524516

525517
def period_range(

0 commit comments

Comments
 (0)