2017-09-05 116 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

相关问题