Python 在指定的时间间隔内,为每个连续小时生成一个数据范围

Python 在指定的时间间隔内,为每个连续小时生成一个数据范围,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试使用Pandas为预定义的一组日期中的每小时生成一组时间间隔。我使用了: 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:

我正在尝试使用Pandas为预定义的一组日期中的每小时生成一组时间间隔。我使用了:

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')
这里有一条路

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 [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)

我使用半小时加一毫秒的频率,这样舍入总是落在“右边”。

谢谢@John GaltNeat使用
freq
舍入
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)