Python3: 将时间跨度转换为实际时间
Python3: converting timespan to actual time
According to GTFS specification、arrival_time
在 GTFS 中归档 stop_times.txt 文件的小时数可以超过 24。
For times occurring after midnight on the service day, enter the time
as a value greater than 24:00:00 in HH:MM:SS local time for the day on
which the trip schedule begins.
这些值旨在表示车辆在每个特定时间将进行的未来停靠。
我有一个 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 objects试图解决这个问题。这里出了问题的是 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
检查前两位数是否大于24,然后去掉24,需要的时候加0。
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']
这可能就是您要找的
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']
According to GTFS specification、arrival_time
在 GTFS 中归档 stop_times.txt 文件的小时数可以超过 24。
For times occurring after midnight on the service day, enter the time as a value greater than 24:00:00 in HH:MM:SS local time for the day on which the trip schedule begins.
这些值旨在表示车辆在每个特定时间将进行的未来停靠。
我有一个 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 objects试图解决这个问题。这里出了问题的是 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
检查前两位数是否大于24,然后去掉24,需要的时候加0。
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']
这可能就是您要找的
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']