Python3:将时间跨度转换为实际时间



根据GTFS规范,GTFS stop_times.txt文件中的arrival_time文件的小时数可能大于24。

对于服务日午夜之后发生的时间,请输入时间大于上一天HH:MM:SS当地时间24:00:00的值行程安排开始于此。

这些值表示车辆在每个特定时间的未来停靠。

我有一个pandas数据帧,它由一堆列组成,其中一列存储arrival_time值。我试图实现的是将那些大于24的值转换为实际的24小时时间戳,例如将25:34:21转换为01:34:21

首先,我尝试将str.replace与正则表达式一起使用,但很快就变得一团糟。

df['arrival_time'].str.replace(r's(24)', '00', regex=True)
df['arrival_time'].str.replace(r's(25)', '01', regex=True)
df['arrival_time'].str.replace(r's(26)', '02', regex=True)
...
df['arrival_time'].str.replace(r's(31 )', '07', regex=True)
...

后来,我浏览了timedelta对象,试图解决这个问题。这里的问题是arrival_time中的每个值可能会有所不同,这取决于从服务器中提取这些值的时间。早上的值可能会上升到例如27,但在晚上的更新中,值可能会超过36。这使得指定日期跨度变得更加困难。

我不太确定该从哪里解决我的问题。

原始列

%Y-%m-%d 13:44:01
%Y-%m-%d 13:56:23
%Y-%m-%d 17:59:02
%Y-%m-%d 24:21:45
%Y-%m-%d 26:15:14

所需状态

%Y-%m-%d 13:44:01
%Y-%m-%d 13:56:23
%Y-%m-%d 17:59:02
%Y-%m-%d+1 00:21:45
%Y-%m-%d+1 02:15:14

这可能是您正在寻找的

provided_times = ["24:00:00", "12:10:32", "36:35:34"]
corrected_times = []
for time in provided_times:
num_hour = eval(time[:2])
count_days = '+1d ' if int(num_hour / 24) else '    '
corrected_times.append(count_days + ('0' + str(num_hour % 24))[-2:] + time[2:])
print(corrected_times)

结果是

['+1d 00:00:00', '    12:10:32', '+1d 12:35:34']

检查前两位数字是否超过24,然后从中删除24,并在需要时添加一个零。

times = [
"24:00:00",
"12:10:32",
"26:35:34"]
results = []
for time in times:
if int(time[0:2]) >= 24:
new_time = str(int(time[0:2]) - 24)
if len(new_time) == 1:
new_time = "0" + new_time
results.append(new_time + time[2:])
else:
results.append(time)
print(results)

输出:

['00:00:00', '12:10:32', '02:35:34']

最新更新