DatetimeIndex仅包含时间部分:是否可能

时间:2014-04-07 12:02:53

标签: python pandas

我遇到了这样的问题。 我有一组观察客流量。数据存储在.xlsx文件中,其结构如下:date_of_observation, time, station_name, boarding, alighting.

我想知道如果我只需要' time'那么是否可以使用这些数据创建带有DatetimeIndex的Dataframe。日期时间的组成部分。 (数据集中没有时间公布)。

这个要求的原因是我使用基于循环时间的特定逻辑(例如,23.00 <0.00,但比较时为0.01 <0.02),因此我不想将它们转换为日期时间。

2 个答案:

答案 0 :(得分:3)

也许您不需要将DatetimeIndex简化为一段时间。相反,要仅根据时间组件选择行,可以使用DataFrame.between_time。例如,

import pandas as pd
import numpy as np

N = 200
dti = pd.date_range('2000-1-1', freq='10T', periods=N)
df = pd.DataFrame({'station_name': np.random.choice(list('ABCDEFGHIJ'), size=N),
                   'boarding': np.arange(N)*10,
                   'alighting': np.arange(N)},
                  index=dti)

数据框如下所示:

>>> print(df.head())

                     alighting  boarding station_name
2000-01-01 00:00:00          0         0            B
2000-01-01 00:10:00          1        10            I
2000-01-01 00:20:00          2        20            H
2000-01-01 00:30:00          3        30            C
2000-01-01 00:40:00          4        40            E

但您可以选择时间介于23:000:30之间的所有行,如下所示:

>>> print(df.between_time('23:00', '0:30'))
                     alighting  boarding station_name
2000-01-01 00:00:00          0         0            B
2000-01-01 00:10:00          1        10            I
2000-01-01 00:20:00          2        20            H
2000-01-01 00:30:00          3        30            C
2000-01-01 23:00:00        138      1380            D
2000-01-01 23:10:00        139      1390            E
2000-01-01 23:20:00        140      1400            A
2000-01-01 23:30:00        141      1410            D
2000-01-01 23:40:00        142      1420            E
2000-01-01 23:50:00        143      1430            B
2000-01-02 00:00:00        144      1440            B
2000-01-02 00:10:00        145      1450            I
2000-01-02 00:20:00        146      1460            F
2000-01-02 00:30:00        147      1470            C

答案 1 :(得分:0)

不,这是不可能的,只能使用datetime或float索引。 但是,unutbu提供的变体非常有用。