2017-01-07 26 views
3

我有一個時間增量,格式爲numpy.timedelta(64): value = numpy.timedelta64(30,'m')
(這裏是30分鐘)。Python,Pandas,Numpy:Date_range:傳遞一個np.timedelta作爲頻率。自變量

有沒有辦法將該值傳遞給構建一個pandas date_range: pd.date_range(start_time, end_time, freq=value)

如果不是如何轉換該值以便將其傳遞給date_range?我試過value.astype('str'),但它返回'0:30:00',這也不適合作爲pd.date_range的參數。

+0

爲什麼-1?這個問題怎麼樣?所有的反饋讚賞。 –

回答

5

您可以將它轉換爲Timedelta並將它傳遞到freq

>>> pd.date_range('20160101', '20170101', freq=pd.Timedelta(value)) 
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 00:30:00', 
       '2016-01-01 01:00:00', '2016-01-01 01:30:00', 
       '2016-01-01 02:00:00', '2016-01-01 02:30:00', 
       '2016-01-01 03:00:00', '2016-01-01 03:30:00', 
       '2016-01-01 04:00:00', '2016-01-01 04:30:00', 
       ... 
       '2016-12-31 19:30:00', '2016-12-31 20:00:00', 
       '2016-12-31 20:30:00', '2016-12-31 21:00:00', 
       '2016-12-31 21:30:00', '2016-12-31 22:00:00', 
       '2016-12-31 22:30:00', '2016-12-31 23:00:00', 
       '2016-12-31 23:30:00', '2017-01-01 00:00:00'], 
       dtype='datetime64[ns]', length=17569, freq='30T') 

我覺得老版本的pandas不支持這一點,但仍然可以使用的頻率字符串:

pd.date_range('20160101', '20170101', freq='30min') 
1

既然你已經開始用numpy.timedelta64,我不知道如何處理np.arange此。

隨着datetime64啓動和停止值arange處理這個問題很好:

In [847]: x=np.arange(np.datetime64('2016-01-01'), np.datetime64('2017-01-01'),value) 
In [848]: x 
Out[848]: 
array(['2016-01-01T00:00', '2016-01-01T00:30', '2016-01-01T01:00', ..., 
     '2016-12-31T22:30', '2016-12-31T23:00', '2016-12-31T23:30'], dtype='datetime64[m]') 

DatetimeIndex接受這樣的一個數組:

In [849]: pd.DatetimeIndex(x) 
Out[849]: 
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 00:30:00', 
       '2016-01-01 01:00:00', '2016-01-01 01:30:00', 
       '2016-01-01 02:00:00', '2016-01-01 02:30:00', 
       '2016-01-01 03:00:00', '2016-01-01 03:30:00', 
       '2016-01-01 04:00:00', '2016-01-01 04:30:00', 
       ... 
       '2016-12-31 19:00:00', '2016-12-31 19:30:00', 
       '2016-12-31 20:00:00', '2016-12-31 20:30:00', 
       '2016-12-31 21:00:00', '2016-12-31 21:30:00', 
       '2016-12-31 22:00:00', '2016-12-31 22:30:00', 
       '2016-12-31 23:00:00', '2016-12-31 23:30:00'], 
       dtype='datetime64[ns]', length=17568, freq=None)