2017-09-05 34 views
-1

我試圖在使用熊貓的預定義日期集合期間爲每個小時生成一組時間間隔。我已經使用:在熊貓中的指定時間間隔內每連續一小時生成一個數據範圍

import pandas as pd 

print pd.date_range(start='2013-04-01', end='2013-04-30', freq='1H') 

DatetimeIndex(['2013-04-01 00:00:00', '2013-04-01 01:00:00', 
       '2013-04-01 02:00:00', '2013-04-01 03:00:00', 
       '2013-04-01 04:00:00', '2013-04-01 05:00:00', 
       '2013-04-01 06:00:00', '2013-04-01 07:00:00', 
       '2013-04-01 08:00:00', '2013-04-01 09:00:00', 
       ... 
       '2013-04-29 15:00:00', '2013-04-29 16:00:00', 
       '2013-04-29 17:00:00', '2013-04-29 18:00:00', 
       '2013-04-29 19:00:00', '2013-04-29 20:00:00', 
       '2013-04-29 21:00:00', '2013-04-29 22:00:00', 
       '2013-04-29 23:00:00', '2013-04-30 00:00:00'], 
       dtype='datetime64[ns]', length=697, freq='H') 

然而,它產生的時間間隔,每隔小時,即[0-1],[2-3],[4-5],...不過,我需要什麼是像[0-1],[1-2],[2-3]這樣的分區,我該怎麼做?提前致謝。

所需的輸出:

DatetimeIndex(['2013-04-01 00:00:00', '2013-04-01 01:00:00', 
       '2013-04-01 01:00:00', '2013-04-01 02:00:00', 
       '2013-04-01 02:00:00', '2013-04-01 03:00:00', 
       '2013-04-01 03:00:00', '2013-04-01 04:00:00', 
       '2013-04-01 04:00:00', '2013-04-01 05:00:00', 
       ... 
       '2013-04-29 19:00:00', '2013-04-29 20:00:00', 
       '2013-04-29 20:00:00', '2013-04-29 21:00:00', 
       '2013-04-29 21:00:00', '2013-04-29 22:00:00', 
       '2013-04-29 22:00:00', '2013-04-29 23:00:00', 
       '2013-04-29 23:00:00', '2013-04-30 00:00:00'], 
       dtype='datetime64[ns]', length=697, freq='H') 

回答

1

這裏有一種方法

In [2249]: d = pd.date_range(start='2013-04-01', end='2013-04-30', freq='H') 

In [2250]: pd.DatetimeIndex([v for p in zip(d, d[1:]) for v in p]) 
Out[2250]: 
DatetimeIndex(['2013-04-01 00:00:00', '2013-04-01 01:00:00', 
       '2013-04-01 01:00:00', '2013-04-01 02:00:00', 
       '2013-04-01 02:00:00', '2013-04-01 03:00:00', 
       '2013-04-01 03:00:00', '2013-04-01 04:00:00', 
       '2013-04-01 04:00:00', '2013-04-01 05:00:00', 
       ... 
       '2013-04-29 19:00:00', '2013-04-29 20:00:00', 
       '2013-04-29 20:00:00', '2013-04-29 21:00:00', 
       '2013-04-29 21:00:00', '2013-04-29 22:00:00', 
       '2013-04-29 22:00:00', '2013-04-29 23:00:00', 
       '2013-04-29 23:00:00', '2013-04-30 00:00:00'], 
       dtype='datetime64[ns]', length=1392, freq=None) 

或者,

In [2252]: pd.DatetimeIndex(itertools.chain(*zip(d, d[1:]))) 
Out[2252]: 
DatetimeIndex(['2013-04-01 00:00:00', '2013-04-01 01:00:00', 
       '2013-04-01 01:00:00', '2013-04-01 02:00:00', 
       '2013-04-01 02:00:00', '2013-04-01 03:00:00', 
       '2013-04-01 03:00:00', '2013-04-01 04:00:00', 
       '2013-04-01 04:00:00', '2013-04-01 05:00:00', 
       ... 
       '2013-04-29 19:00:00', '2013-04-29 20:00:00', 
       '2013-04-29 20:00:00', '2013-04-29 21:00:00', 
       '2013-04-29 21:00:00', '2013-04-29 22:00:00', 
       '2013-04-29 22:00:00', '2013-04-29 23:00:00', 
       '2013-04-29 23:00:00', '2013-04-30 00:00:00'], 
       dtype='datetime64[ns]', length=1392, freq=None) 
+0

謝謝@John Galt – Paul

1

一行代碼,直接做:

In [237]: pd.date_range(start='2013-04-01', end='2013-04-30', freq='0.5H1U').round('1H') 
Out[237]: 
DatetimeIndex(['2013-04-01 00:00:00', '2013-04-01 01:00:00', 
       '2013-04-01 01:00:00', '2013-04-01 02:00:00', 
       '2013-04-01 02:00:00', '2013-04-01 03:00:00', 
       '2013-04-01 03:00:00', '2013-04-01 04:00:00', 
       '2013-04-01 04:00:00', '2013-04-01 05:00:00', 
       ... 
       '2013-04-29 19:00:00', '2013-04-29 20:00:00', 
       '2013-04-29 20:00:00', '2013-04-29 21:00:00', 
       '2013-04-29 21:00:00', '2013-04-29 22:00:00', 
       '2013-04-29 22:00:00', '2013-04-29 23:00:00', 
       '2013-04-29 23:00:00', '2013-04-30 00:00:00'], 
       dtype='datetime64[ns]', length=1392, freq=None) 

我使用的頻率爲半小時,加上一毫秒,因此舍入總是落在「右側」。

+0

整齊使用'freq'和'round'! – Zero

相關問題