diff --git a/pandas/_libs/tslibs/period.pyx b/pandas/_libs/tslibs/period.pyx index a769bbb081398..72cc33fa2002c 100644 --- a/pandas/_libs/tslibs/period.pyx +++ b/pandas/_libs/tslibs/period.pyx @@ -30,7 +30,7 @@ cdef extern from "src/datetime/np_datetime.h": npy_datetimestruct *d) nogil cimport util -from util cimport is_period_object, is_string_object +from util cimport is_period_object, is_string_object, is_offset_object from timestamps import Timestamp, maybe_integer_op_deprecated from timezones cimport is_utc, is_tzlocal, get_dst_info @@ -1442,7 +1442,7 @@ def extract_ordinals(object[:] values, freq): int64_t[:] ordinals = np.empty(n, dtype=np.int64) object p - freqstr = Period._maybe_convert_freq(freq).freqstr + freq = Period._maybe_convert_freq(freq) for i in range(n): p = values[i] @@ -1453,8 +1453,8 @@ def extract_ordinals(object[:] values, freq): try: ordinals[i] = p.ordinal - if p.freqstr != freqstr: - msg = DIFFERENT_FREQ_INDEX.format(freqstr, p.freqstr) + if p.freqstr != freq.freqstr: + msg = DIFFERENT_FREQ_INDEX.format(freq.freqstr, p.freqstr) raise IncompatibleFrequency(msg) except AttributeError: @@ -1567,12 +1567,12 @@ cdef class _Period(object): @classmethod def _maybe_convert_freq(cls, object freq): + if not is_offset_object(freq): + if isinstance(freq, (int, tuple)): + code, stride = get_freq_code(freq) + freq = get_freq_str(code, stride) - if isinstance(freq, (int, tuple)): - code, stride = get_freq_code(freq) - freq = get_freq_str(code, stride) - - freq = to_offset(freq) + freq = to_offset(freq) if freq.n <= 0: raise ValueError('Frequency must be positive, because it'