Pandas如何将赛车m:ss.000/ss.000格式计时数据转换为秒数
赛车计时数据转总秒数简洁实现方案
针对两种格式(ss.000秒.毫秒、m:ss.000分:秒.毫秒)的圈速/分段计时数据,不需要手动写字符串拆分逻辑,用pandas原生时间差解析方法即可实现批量转换,代码更简洁、兼容性更强。
实现步骤
- 首先注意原始数据构造时,带冒号的分秒格式值需要存储为字符串类型,否则Python会把
1:13.564识别为非法语法,正确的测试DataFrame构造如下:
import pandas as pd df = pd.DataFrame( [["48.004", "1:13.564"], ["38.965", "58.223"], ["45.630", "1:10.084"]], columns=["S1", "S2"] )
- 编写单值转换函数,用
pd.to_timedelta自动识别时间格式,统一输出总秒数:
def to_seconds(time_val): time_str = str(time_val) # 带冒号的格式直接按分:秒.毫秒解析,不带冒号的补秒单位后解析 parse_str = time_str if ":" in time_str else f"{time_str}s" return pd.to_timedelta(parse_str).total_seconds()
- 批量转换DataFrame所有计时列,需要修改列名的话直接重命名即可:
# 全表批量转换 df = df.applymap(to_seconds) # 重命名为目标列名 df.columns = ["A", "B"]
转换结果
执行后输出的结果完全匹配需求:
A B 0 48.004 73.564 1 38.965 58.223 2 45.630 70.084
方案优势
- 不需要手动实现字符串拆分、数值换算逻辑,pandas原生解析自带类型兼容、异常值处理能力
- 扩展性强,后续如果出现
h:mm:ss.000(时:分:秒.毫秒)的长圈速格式,不需要修改代码即可直接解析 - 兼容混合数据类型,原始列里同时存在浮点数格式的秒数、字符串格式的分秒值也能正常转换
内容的提问来源于stack exchange,提问作者Andrei Filep
相关产品推荐
相关产品推荐

