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
相关产品推荐
相关产品推荐

