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

如何更快且优雅地修正DataFrame中超过24小时的时间列

优化CSV跨午夜时间的处理效率与代码优雅性

最近处理CSV数据时碰到个问题:我读取的文件里有一列EntryTOD(一天中的时间),部分跨午夜的事件时间没有回滚到00:00,而是直接涨到了24点以上(比如24:00:01、25:10:30这类格式),而且这列数据是字符串类型。我需要把小时数≥24的时间减去24小时,转换成正常的0-23小时格式。

最开始我用循环逐行处理:

for row in f2.itertuples():
    # Fix times > 24h
    if int(row.EntryTOD[0:2]) >= 24:
        actualTime = int(row.EntryTOD[0:2]) - 24
        f2.EntryTOD[row.Index-1] = str(actualTime) + row.EntryTOD[2:]

代码能跑,但处理8万多行数据居然要30-40秒,实在太慢了。所以想请教两个问题:

  • 有没有更快的实现方式?
  • 作为Python新手,有没有更优雅的写法?比如能不能用一行代码搞定?

高效优雅的解决方案(感谢Rene)

用Pandas的apply方法配合lambda表达式就能完美解决这两个问题,不仅速度飙升,还能写成一行代码:

f2.EntryTOD = f2.EntryTOD.apply(lambda x: str(int(x.split(':')[0])-24)+x[2:] if int(x.split(':')[0]) > 23 else x)

这个方法的逻辑很清晰:对每个时间字符串,先通过split(':')拆分出小时部分,判断是否大于23(也就是≥24),如果是就把小时数减24,再拼接回原字符串的分钟和秒部分;如果不是就直接保留原时间。相比逐行循环,Pandas的向量化操作能大幅提升处理大数据集的效率,8万行数据基本瞬间就能处理完。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:23