在 python 中查找当前日期前 12 个月的开始日期

Find start date of previous 12 month from current date in python

代码

today = pd.to_datetime('today').strftime("%d/%m/%Y")
last = (pd.to_datetime(today) - pd.DateOffset(years=1)).strftime("%d/%m/%Y")

listofmonths = pd.date_range(start=last, end=today, freq='MS') 
listofmonths

输出:

DatetimeIndex(['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01',
           '2021-10-01', '2021-11-01', '2021-12-01', '2022-01-01'],
          dtype='datetime64[ns]', freq='MS')

注: 参考我只有 8 个月的输出,我想要从当前日期开始的第一个日期过去 12 个月

预期输出:

 **DatetimeIndex(['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01',
           '2021-10-01', '2021-11-01', '2021-12-01','2021-01-01', '2022-02-01',
           '2022-03-01','2022-04-01', '2022-05-01', '2022-06-01',],
          dtype='datetime64[ns]', freq='MS')**

尝试将 strftime 从“%d/%m/%Y”更新为“%m/%d/%Y”:

today = pd.to_datetime('today').strftime("%m/%d/%Y")
last = (pd.to_datetime(today) - pd.DateOffset(years=1)).strftime("%m/%d/%Y")

listofmonths = pd.date_range(start=last, end=today, freq='MS')

输出:

DatetimeIndex(['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01',
               '2021-10-01', '2021-11-01', '2021-12-01', '2022-01-01',
               '2022-02-01', '2022-03-01', '2022-04-01', '2022-05-01',
               '2022-06-01'],
              dtype='datetime64[ns]', freq='MS')

P.s。问题是,'today' 被视为 6 月 1 日:

>>> last
'06/01/2021'
>>> today
'01/06/2022'

问题是 %d/%m/%Y 是日优先,但默认情况下 pandas 使用月优先

today = pd.to_datetime('today')
last = (pd.to_datetime(today) - pd.DateOffset(years=1))

listofmonths = pd.date_range(start=last, end=today, freq='MS').strftime("%d/%m/%Y")
Index(['01/06/2021', '01/07/2021', '01/08/2021', '01/09/2021', '01/10/2021',
       '01/11/2021', '01/12/2021', '01/01/2022', '01/02/2022', '01/03/2022',
       '01/04/2022', '01/05/2022', '01/06/2022'],
      dtype='object')

对于 pd.date_range 使用 datetime/timestamp 对象而不是字符串会更明智。

today_ts = pd.to_datetime('today').floor(freq='D')
last_ts = (pd.to_datetime(today_ts) - pd.DateOffset(years=1))

listofmonths = pd.date_range(start=last_ts, end=today_ts, freq='MS') 
listofmonths
DatetimeIndex(['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01',
               '2021-10-01', '2021-11-01', '2021-12-01', '2022-01-01',
               '2022-02-01', '2022-03-01', '2022-04-01', '2022-05-01',
               '2022-06-01'],
              dtype='datetime64[ns]', freq='MS')

如果您需要将它们用作字符串,您可以稍后将其转换

尝试将标准日期时间 python 库用于任何与日期时间相关的内容。
您的错误可能是类型错误。
这段代码对我来说很好用。

from datetime import timedelta, datetime

today = datetime.now().strftime("%Y-%m-%d")
past = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")

pd.date_range(past, today, freq="MS")

输出:

DatetimeIndex(['2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01',
               '2021-10-01', '2021-11-01', '2021-12-01', '2022-01-01',
               '2022-02-01', '2022-03-01', '2022-04-01', '2022-05-01',
               '2022-06-01'],
              dtype='datetime64[ns]', freq='MS')