2017-08-17 47 views
2

我想提一個日期(比如2016-10-27)和一個持續時間(比如5天),我想從最早的一天開始過去5天的日期範圍。如何使用熊貓向後生成日期範圍?

例子:2016-10-22 2016-10-23 2016-10-24 2016-10-25 2016-10-26

我已經試過這

pd.date_range('2016-10-27', freq='D', periods=5)[::-1] 

但是,這是給我的錯誤,顛倒順序。

DatetimeIndex(['2016-10-31', '2016-10-30', '2016-10-29', '2016-10-28', 
       '2016-10-27'], 
       dtype='datetime64[ns]', freq='-1D') 

我該怎麼辦呢>

回答

4

IIUC我們可以使用end參數:

In [240]: pd.date_range(end='2016-10-27', freq='D', periods=5) 
Out[240]: DatetimeIndex(['2016-10-23', '2016-10-24', '2016-10-25', '2016-10-26', '2016-10-27'], dtype='datetime64[ns]', freq='D') 

或:

In [242]: pd.date_range(end='2016-10-27', freq='D', periods=5) - pd.Timedelta('1 day') 
Out[242]: DatetimeIndex(['2016-10-22', '2016-10-23', '2016-10-24', '2016-10-25', '2016-10-26'], dtype='datetime64[ns]', freq='D') 
1

選項1
偏移開始日期

pd.date_range(
    start=pd.Timestamp('2016-10-27') - pd.offsets.Day(4), 
    freq='D', periods=5) 

DatetimeIndex(['2016-10-23', '2016-10-24', '2016-10-25', '2016-10-26', 
       '2016-10-27'], 
       dtype='datetime64[ns]', freq='D') 

選項2
討厭的!!!!太可怕了。我發佈這個的唯一理由是我想找到一些替代方案。

pd.to_datetime(['2016-10-27']).values + pd.to_timedelta([1], 'D')[:, None] * -np.arange(5)[::-1] 

array([['2016-10-23T00:00:00.000000000', '2016-10-24T00:00:00.000000000', 
     '2016-10-25T00:00:00.000000000', '2016-10-26T00:00:00.000000000', 
     '2016-10-27T00:00:00.000000000']], dtype='datetime64[ns]')