将熊猫的日期时间转换为从开始开始的小时数

时间:2018-11-29 00:29:14

标签: python pandas datetime indexing

我有一个具有以下数据时间索引的数据框:

DatetimeIndex(['2018-10-17 00:00:00', '2018-10-17 01:00:00',
               '2018-10-17 02:00:00', '2018-10-17 03:00:00',
               '2018-10-17 04:00:00', '2018-10-17 05:00:00',
               '2018-10-17 06:00:00', '2018-10-17 07:00:00',
               '2018-10-17 08:00:00', '2018-10-17 09:00:00',
               ...
               '2018-11-29 15:00:00', '2018-11-29 16:00:00',
               '2018-11-29 17:00:00', '2018-11-29 18:00:00',
               '2018-11-29 19:00:00', '2018-11-29 20:00:00',
               '2018-11-29 21:00:00', '2018-11-29 22:00:00',
               '2018-11-29 23:00:00', '2018-11-30 00:00:00'],
              dtype='datetime64[ns]', name='dates', length=914, freq=None)

如何将其转换为第一个日期时间索引的小时数,即0、1、2 ...

2 个答案:

答案 0 :(得分:1)

您可以从索引中的所有值中减去第一个日期时间,然后除以numpy.timedelta(1,'h')(1小时的时间差):

(df.index - df.index[0]) / np.timedelta64(1,'h')
Float64Index([   0.0,    1.0,    2.0,    3.0,    4.0,    5.0,    6.0,    7.0,
                 8.0,    9.0, 
                 ...
                 1047.0, 1048.0, 1049.0, 1050.0, 1051.0, 1052.0,
                 1053.0, 1054.0, 1055.0, 1056.0],
             dtype='float64', name='dates')

答案 1 :(得分:0)

您的问题似乎暗示索引是原始时间戳在小时上,并且结果应该是整数,在这种情况下,我将修改sacul对类似

的答案
24*(idx - idx[0]).days + idx.hour
Int64Index([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9, 1047,
        1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056],
       dtype='int64', name='dates')

,并使用components的{​​{1}}属性处理剩余的分钟,秒和等。,以便仅使用已经公开的属性。