Как преобразовать список временных меток в формате чч: мм: сс в минуты с полуночи - PullRequest
0 голосов
/ 31 января 2020

У меня есть Pandas кадр данных со столбцом для appointmentStartTime в формате hh:mm:ss. Я хотел бы включить это в минуты после полуночи для этого конкретного c дня. Например, 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 ]

2 голосов
/ 31 января 2020
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 голос
/ 31 января 2020

taskData.appointmentStartTime должно быть int, long или float, чтобы быть действительным аргументом для timedelta():

A timedelta объект представляет длительность, разницу между двумя датами или временем.

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

Все аргументы являются необязательными и по умолчанию 0. Аргументы могут быть ints, longs или floats и могут быть положительными или отрицательными.

0 голосов
/ 31 января 2020

Я просто рассмотрю первые 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 )
...