首页 > 解决方案 > 以数字数据类型访问 datetime.time (00:00 - 23:59) 格式

问题描述

我有一个 24 小时平均数据,该数据从 00:00 - 23:59 开始索引,间隔为 1 分钟。这导致每分钟对应 1440 个数据点。我想将这些时间戳映射到它们的数字索引,范围从 0-1440(因为一整天有 1440 分钟)。

例如,00:00 ->0、00:01->1、00:02->2 ...23:58->1339、23:59->1440

时间 = 01:11 dtype:datetime.time
time.func()
71

我试图在 pandas 中搜索 datetime.time 格式是否有任何此类功能。但是,我找不到任何东西。

如果 pandas 中没有内置功能,另一种方法可能是编写一个将特定 datetime.time 映射到索引 (0-1440) 的函数。

标签: pythonpandastime

解决方案


看看这是不是你想要的:

import pandas as pd
df = pd.DataFrame(['23:57', '10:39', '4:03'], columns=['Time'])

此数据框如下所示:

    Time
0  23:57
1  10:39
2   4:03

然后我们可以在我们的列上应用这个函数:

df['Time'].apply(lambda x: int(pd.to_timedelta(pd.to_datetime(x, format='%H:%M').strftime('%H:%M:00'), unit='m').total_seconds()/60))

其中输出为:

0    1437
1     639
2     243
Name: Time, dtype: int64

在这里,我们使用 apply 将相同的函数应用于列的所有元素。

  1. 转换为日期时间格式(这里我使用 '%H:%M' 指定格式,以确保我们明确地将时间转换为小时和分钟。
  2. 通过使用 strftime 添加 ':00' 来使用额外的秒元素格式化时间,这是因为 pd.to_timedelta 需要 'hh:mm:ss' 格式的时间
  3. 然后我们得到timedelta的total_seconds()除以60得到分钟
  4. 转换为整数以获得最终格式。

推荐阅读