我有一个如下所示的数据框:
arrival departure
0 23:55:00 23:57:00
1 23:57:00 23:59:00
2 23:59:00 24:01:00
3 24:01:00 24:03:00
4 24:03:00 24:05:00
我正在处理涵盖一整天和一天后部分时间的数据。数据(大多数时候)采用 HH:MM:SS
格式。但是,某些时间值高于 23:59:59,最高可达 27:00:00。
我想获取出发
和到达
列之间的时间差。
我尝试使用datetime
来做到这一点,但我猜出了问题:
FMT = '%H:%M:%S'
delta = datetime.strptime(df['departure'], FMT) - datetime.strptime(df['arrival'], FMT)
这会引发以下错误:
ValueError: time data '24:01:00' does not match format '%H:%M:%S'
有没有办法获得这两列之间的时间差,即使它们的格式并不总是与 HH:MM:SS
格式匹配?
最佳答案
您可以使用 datetime 中的 timedelta
import datetime
delta1 = datetime.timedelta(hours=23, minutes=59, seconds=0)
delta2 = datetime.timedelta(hours=24, minutes=01, seconds=0)
timedelta = delta2 - delta1
>>> timedelta # or timedelta.to_seconds()
datetime.timedelta(seconds=120)
以秒为单位给出增量。完整示例:
import datetime
arrival = "24:01:00"
departure = "24:03:00"
def get_time_from_string(t):
return dict(
zip(["hours", "minutes", "seconds"], list(map(lambda x: int(x), t.split(":"))),)
)
delta1 = datetime.timedelta(**get_time_from_string(arrival))
delta2 = datetime.timedelta(**get_time_from_string(departure))
delta = delta2 - delta1
print(delta.total_seconds())
关于python - 操作值与 HH :MM:SS format - python 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229650/