以数字数据类型访问datetime.time(00:00-23:59)格式

时间:2019-02-05 05:30:08

标签: python pandas time

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

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

  
    

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

  

我试图搜索datetime.time格式的熊猫中是否有这样的功能。但是,我找不到任何东西。

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

2 个答案:

答案 0 :(得分:0)

pandas没有本地time dtype,但是确实有timedelta:

In [11]: t = dt.time(10, 15)

In [12]: t.hour * 60 + t.minute  # total minutes (this may suffice!)
Out[12]: 615

In [13]: pd.to_timedelta((t.hour * 60 + t.minute), unit='m')
Out[13]: Timedelta('0 days 10:15:00')

注意:您也许可以从一开始就从timedelta开始工作(无论是解析还是通过计算):

In [14]: pd.to_timedelta('10:15:00')
Out[14]: Timedelta('0 days 10:15:00')

答案 1 :(得分:0)

看一下这是否是您想要的:

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'来格式化带有额外的seconds元素的时间,这是因为pd.to_timedelta希望使用'hh:mm:ss'格式的时间
  3. 然后我们获得timedelta的total_seconds()并除以60得到分钟数
  4. 转换为整数以获取最终格式。