Pandas处理超过24:00:00的时间格式转换问题求助
解决超过24:00:00的时间格式转换问题
问题根源
pd.to_datetime的%H格式仅接受00-23的小时数值,而你的数据中存在24:18:00这类跨天时间,因此触发格式不匹配的ValueError。
解决方案
根据使用场景,推荐两种处理方式:
1. 转换为Timedelta类型(适合仅计算时间间隔)
如果不需要具体日期,仅需处理时间跨度,将时间转为Timedelta是最直接的方式,天然支持超过24小时的时间:
def parse_over24_time(time_str): # 拆分时、分、秒并转为整数 hours, minutes, seconds = map(int, time_str.split(':')) # 返回Timedelta对象 return pd.Timedelta(hours=hours, minutes=minutes, seconds=seconds) # 应用函数转换列 Trains["arrival_time"] = Trains["arrival_time"].apply(parse_over24_time)
处理后,24:18:00会被转为1 days 00:18:00的Timedelta,后续计算时间差、累加等操作完全兼容。
2. 转换为带日期的Datetime类型(需关联具体日期)
如果需要将到达时间映射到具体日期(比如结合出发时间),可以先转Timedelta,再基于出发日期计算实际到达时间:
# 先将到达时间转为Timedelta def parse_over24_time(time_str): hours, minutes, seconds = map(int, time_str.split(':')) return pd.Timedelta(hours=hours, minutes=minutes, seconds=seconds) Trains["arrival_delta"] = Trains["arrival_time"].apply(parse_over24_time) # 假设出发日期为基准日期(比如2024-01-01),结合出发时间生成出发Datetime # 这里需替换成你的出发时间列名 Trains["departure_datetime"] = pd.to_datetime("2024-01-01 " + Trains["departure_time"]) # 计算实际到达Datetime Trains["arrival_datetime"] = Trains["departure_datetime"] + Trains["arrival_delta"]
这种方式会自动处理跨天情况,比如Day1 23:50出发,加上00:28的间隔(对应24:28:00),会得到Day2的00:18:00。
内容的提问来源于stack exchange,提问作者sinnistier
相关产品推荐
相关产品推荐

