仅使用时间部分的DatetimeIndex:可能吗?

1 投票
2 回答
1408 浏览
提问于 2025-04-18 01:42

我遇到了一个问题。
我有一组关于乘客流量的观察数据,这些数据保存在一个.xlsx文件里,结构如下:观察日期, 时间, 车站名称, 上车人数, 下车人数。

我想知道,是否可以从这些数据创建一个包含时间索引的Dataframe,只提取'时间'这个部分。(数据集中没有重复的时间)。

这样做的原因是,我使用了一种基于循环时间的特定逻辑(比如,23:00小于0:00,但0:01大于0:02),所以我不想把它们转换成完整的日期时间格式。

2 个回答

3

也许你不需要把时间索引简化成只有时间。相反,如果你想根据时间来选择行,可以使用 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
0

不,这个是不可能的,只能用日期时间或者浮点数作为索引。不过,unutbu 提供的变体还是很有用的。

撰写回答