You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何将HH:MM:SS转秒、无效'-'转换为NaT

马拉松分段成绩转换实现方案

你之前使用pd.to_datetime出现1900-01-01前缀的核心原因是:datetime类型用于表示时间点,必须包含日期、时间两部分信息,你仅传入时间字符串时,pandas会自动补全默认日期1900-01-01,属于类型的正常表现。而马拉松分段成绩属于时间间隔,应该用pd.to_timedelta处理,不仅符合业务语义,性能也更高。

最高效实现方案(全向量化操作,无自定义遍历逻辑,性能远高于逐元素处理)

场景1:将"-"转为NaT,成绩保留时间间隔类型

# 选中所有分段成绩列
time_cols = df.loc[:, "5K":].columns
# 自动识别HH:MM:SS格式,"-"等无效值自动转为NaT
df[time_cols] = df[time_cols].apply(pd.to_timedelta, errors="coerce")

场景2:直接将成绩转为总秒数(数值类型,无效值对应NaN)

time_cols = df.loc[:, "5K":].columns
# 先转时间间隔,再计算总秒数
df[time_cols] = df[time_cols].apply(pd.to_timedelta, errors="coerce").apply(lambda x: x.dt.total_seconds())

方案说明

  • 全程使用pandas内置C实现的向量化方法,处理百万级行数据也能快速完成
  • errors="coerce"参数自动处理"-"值,完全符合你的转换要求
  • 不需要调整原有CSV读取逻辑,直接对已加载的DataFrame处理即可

内容的提问来源于stack exchange,提问作者user15936471

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:36:04