如何在Pandas DataFrame中计算起止时间差并输出为HH:MM格式
时间差计算实现方案
实现逻辑
- 将
%d.%m.%Y格式的日期字符串解析为datetime.date类型 - 通过
datetime.datetime.combine()方法将拆分的日期、时间拼接为完整的 datetime 时间点 - 计算结束时间与起始时间的差值得到 timedelta 对象
- 对 timedelta 的总秒数做换算,格式化为
HH:MM格式,不足两位自动补零
可运行代码
import datetime # 输入数据 start_date = ['29.12.2020', '29.12.2020', '30.12.2020', '30.12.2020', '30.12.2020'] start_time = [datetime.time(11, 10), datetime.time(23, 15), datetime.time(5, 15), datetime.time(11, 15), datetime.time(17, 15)] end_date = ['29.12.2020', '30.12.2020', '30.12.2020', '30.12.2020', '30.12.2020'] end_time = [datetime.time(23, 15), datetime.time(5, 15), datetime.time(11, 15), datetime.time(17, 15), datetime.time(23, 15)] time_diff_result = [] for sd, st, ed, et in zip(start_date, start_time, end_date, end_time): # 解析字符串日期为date类型 start_date_obj = datetime.datetime.strptime(sd, "%d.%m.%Y").date() end_date_obj = datetime.datetime.strptime(ed, "%d.%m.%Y").date() # 拼接为完整时间点 start_full = datetime.datetime.combine(start_date_obj, st) end_full = datetime.datetime.combine(end_date_obj, et) # 计算时间差并格式化 delta = end_full - start_full total_sec = delta.total_seconds() h = int(total_sec // 3600) m = int((total_sec % 3600) // 60) time_diff_result.append(f"{h:02d}:{m:02d}") # 输出结果 print(time_diff_result)
输出结果
['12:05', '06:00', '06:00', '06:00', '06:00']
其中第一个结果和给出的示例12:05完全一致。
内容的提问来源于stack exchange,提问作者fgbh1997
相关产品推荐
相关产品推荐

