如何让 strftime 输出每年的季度?

How to get strftime to output yearly quarters?

我正在尝试在 python 中创建一个年季度列表;根据文档(https://pandas.pydata.org/docs/reference/api/pandas.Period.strftime.html),%q(我相信)应该输出日历季度的整数表示,但我得到的输出只是字面上的 %q

输入:

pd.date_range('2021-01-01','2022-01-01',freq='Q').strftime('%Y-%q').tolist()

预期输出:

['2021-01', '2021-02', '2021-03', '2021-04']

实际输出:

['2021-%q', '2021-%q', '2021-%q', '2021-%q']

%q 格式化程序特定于 Period.strftime,因此它必须与 Period 数据一起使用:

The method recognizes the same directives as the time.strftime function of the standard Python distribution, as well as the specific additional directives %f, %F, %q.

要么直接创建一个 period_range(但请注意,它包括结束日期,与 date_range 不同):

periods = pd.period_range('2021-01-01', '2022-01-01', freq='Q')
# PeriodIndex(['2021Q1', '2021Q2', '2021Q3', '2021Q4', '2022Q1'], dtype='period[Q-DEC]')

periods.strftime('%Y-0%q').tolist()
# ['2021-01', '2021-02', '2021-03', '2021-04', '2022-01']

或将现有的 DatetimeIndex 转换为 PeriodIndex:

dates = pd.date_range('2021-01-01', '2022-01-01', freq='Q')
# DatetimeIndex(['2021-03-31', '2021-06-30', '2021-09-30', '2021-12-31'], dtype='datetime64[ns]', freq='Q-DEC')

pd.PeriodIndex(dates).strftime('%Y-0%q').tolist()
# ['2021-01', '2021-02', '2021-03', '2021-04']