1
我建立了一個例程,它使用不同的頻率和週期創建了一個日期列表,我唯一不能工作的就是在月末使用'M'時使用週期。使用頻率和週期的日期範圍
def run_date_creator(start_date, end_date, steps, interval):
#Interval: Days(d or D), Weeks (w or W), Month (m or M), Quarters (q or Q) and Years(y or Y)
start_date = pd.to_datetime(start_date)
end_date = pd.to_datetime(end_date)
if interval == 'd' or interval == 'D':
dates = pd.date_range(start_date, end_date, freq=pd.tseries.offsets.DateOffset(days=1*steps))
elif interval == 'w':
dates = pd.date_range(start_date, end_date, freq=pd.tseries.offsets.DateOffset(days=7*steps))
elif interval == 'bm' or interval == 'BM':
dates = pd.date_range(start_date, end_date, freq=pd.tseries.offsets.DateOffset(months=1*steps))
elif interval == 'em' or interval == 'EM':
dates = pd.date_range(start_date, end_date, freq='M')
elif interval == 'q' or interval == 'Q':
dates = pd.date_range(start_date, end_date, freq=pd.tseries.offsets.DateOffset(months=3*steps))
elif interval == 'y' or interval == 'Y':
dates = pd.date_range(start_date, end_date, freq=pd.tseries.offsets.DateOffset(months=12*steps))
return list(dates.strftime("%Y-%m-%d"))
start_date = '2017-1-1'
end_date = '2017-12-31'
dates = run_date_creator(start_date, end_date , 2, 'em')
在此先感謝。
這個工作對我來說:'pd.date_range(日期,結束日期,頻率= 'M')''給DatetimeIndex([ '2017年1月31日', '2017年2月28日',「2017年-03-31','2017-04-30', '2017-05-31','2017-06-30','2017-07-31','2017-08-31', '2017 -09-30','2017-10-31','2017-11-30','2017-12-31'], dtype ='datetime64 [ns]',freq ='M')' – EdChum
抱歉錯字,它的意思是使用steps = 2來得到你'2017-01-31','2017-03-31','2017-05-31'等 – ThatQuantDude
夫婦的事情:1)你說你的問題是隻有'M',但我沒有看到你使用'M'。你的意思是'EM'? 2)如果這真的是你唯一的問題,你應該孤立你的例子,只包括這一點。 3)考慮使用字典而不是所有那些'if/elif'語句。 4)使用例如'interval.lower()=='d''而不是檢查大寫和小寫的間隔(處理你得到''Em''的情況) –