代码
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')**
尝试从"%更新strftimed/%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')
附言:问题是,"今天"被视为1月6日:
>>> last
'06/01/2021'
>>> today
'01/06/2022'
问题是%d/%m/%Y
是第一天,但默认情况下Panda使用第一个月的
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
,最好使用日期时间/时间戳对象,而不是字符串。
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')