Skip to content

Conversion

Valid freq values

https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

pd.Timestamp to week datetime (date for Monday)

s = pd.Series(pd.date_range('2023-09-01','2023-09-04', freq='D'))
s.dt.to_period('W').dt.start_time
s.dt.to_period('W').dt.to_timestamp()
s.dt.to_period('W').dt.strftime('%Y-%m-%d')

pd.Timestamp to month datetime

s.dt.to_period('M').dt.to_timestamp()
s.dt.to_period('M').dt.strftime('%Y-%m')
df['mth'] = df['dt'].astype('datetime64[M]')

pd.Timestamp to Quarter datetime (str)

s.dt.to_period('Q').dt.to_timestamp()
s.dt.to_period('Q').dt.strftime('%YQ%q')
s.dt.to_period('Q').dt.strftime('%Y-%m-%d')

per = pd.Timestamp('2023-07-01').to_period('Q-DEC') #cal year quarter
per = pd.Timestamp('2023-07-01').to_period('Q-JUN') #fin year quarter

pd.Timestamp to cal/fin year

per = pd.Timestamp('2023-07-01').to_period('A-DEC') #cal year
per = pd.Timestamp('2023-07-01').to_period('A-JUN') #fin year

Quarter-Year to pd.Timestamp

qs = df['Quarter'].str.replace(r'(Q\d) (\d+)', r'\2-\1')
ymd_quarter = pd.PeriodIndex(qs, freq='Q').to_timestamp()
ymd_quarter = pd.to_datetime(qs, errors='coerce')

DateOffset

#within the same day
>>> pd.Timestamp("2021-08-25") - pd.DateOffset(months=1)
Timestamp('2021-07-25 00:00:00')

#offset to the period end
>>> pd.Timestamp("2021-07-01") - pd.tseries.frequencies.to_offset('A-JUN')
Timestamp('2022-06-30 00:00:00')

#offset to the period start
>>> pd.Timestamp("2021-07-01") + pd.tseries.frequencies.to_offset('AS-JUL')
Timestamp('2022-07-01 00:00:00')

#offset to the period start: Cal Year
>>> pd.Timestamp("2021-01-01") + pd.tseries.frequencies.to_offset('AS-JAN')
Timestamp('2022-01-01 00:00:00')