如何将hh:mm:ss格式的时间戳列表转换为午夜以来的分钟

时间:2020-01-31 16:34:59

标签: python timedelta

我有一个appointmentStartTime格式的hh:mm:ss列的Pandas数据框。我想在特定日期的午夜之后开始讨论。例如,5:00 AM变为'300'。我已经看到了一些解决方案,您可以在这些解决方案中调用当前日期和时间,然后再减去它们,但这在这里并不能完全满足我的需求。

到目前为止的代码

import datetime
from datetime import datetime as dt
from datetime import timedelta
file = C:\path\to\csv
taskData = pd.read_csv(os.path.basename(taskFile))
taskData.head()

row_id    appointmentStartTime
1         13:00:00
2         8:00:00
3         9:00:00
4         10:00:00


delta = timedelta(taskData.appointmentStartTime)
min_since_midnight = delta.total_minutes
display(min_since_midnight)

这是错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-1578aa374224> in <module>
      2 #ex. 5:00 AM is 300 minutes after midnight
      3 
----> 4 delta = timedelta(taskData.appointmentStartTime)
      5 min_since_midnight = delta.total_minutes
      6 display(min_since_midnight)

TypeError: unsupported type for timedelta days component: Series

3 个答案:

答案 0 :(得分:2)

import datetime as dt

def min_mid_night(t_str=str):
    time = dt.datetime.strptime(t_str, "%H:%M:%S")
    return time.hour*60 + time.minute
df2['min_from_mid_nigth'] = df2.appointmentStartTime.apply(min_mid_night)

   row_id appointmentStartTime  min_from_mid_nigth
0       1             13:00:00                 780
1       2              8:00:00                 480
2       3              9:00:00                 540
3       4             10:00:00                 600

答案 1 :(得分:1)

taskData.appointmentStartTime必须是intlongfloat,才能成为timedelta()的有效参数:

一个timedelta对象代表一个持续时间,两者之差 日期或时间。

class datetime.timedelta([days[, seconds[, microseconds[,milliseconds[, minutes[, hours[, weeks]]]]]]])

所有参数都是 可选,默认为0。参数可以是intslongsfloats, 可能是正面的也可能是负面的。

答案 2 :(得分:0)

我只考虑午夜后的前12小时,您可以选择任何时间段

import datetime as DT
appointmentStartTime="10:00:00"  
_,d,h,m,s = (':0'*10+appointmentStartTime).rsplit(':',4)
r=0

t=DT.datetime.strptime(appointmentStartTime, '%H:%M:%S')
print(t.hour)
if int(t.hour)>=0 and int(t.hour)<=12 :
    r=(int(d)*24*60*60+int(h)*60*60+int(m)*60+int(s))/60
print(r )
#or convert any time period 
r=(int(d)*24*60*60+int(h)*60*60+int(m)*60+int(s))/60
print(r )