我有一个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
答案 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
必须是int
,long
或float
,才能成为timedelta()
的有效参数:
一个
timedelta
对象代表一个持续时间,两者之差 日期或时间。
class datetime.timedelta([days[, seconds[, microseconds[,milliseconds[, minutes[, hours[, weeks]]]]]]])
所有参数都是 可选,默认为
0
。参数可以是ints
,longs
或floats
, 可能是正面的也可能是负面的。
答案 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 )