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

如何在Pandas中用strptime兼容两种时间格式解析CSV数据?

解决CSV时间列多格式解析报错问题

你的timeparse_1函数存在两个核心问题:

  • 未接收目标参数:函数定义时没有将待解析的时间字符串作为参数传入,导致内部引用x时触发NameError。
  • finally块逻辑错误:finally语句块无论try执行成功与否都会强制执行,这意味着即便try里的格式解析成功,finally的代码也会覆盖返回结果,应该改用except捕获解析失败的场景。

修正后的自定义解析函数

def timeparse_1(x):
    try:
        # 优先尝试解析带小时的格式
        return datetime.strptime(x, '%H:%M:%S.%f')
    except ValueError:
        # 格式不匹配时,尝试分:秒.毫秒的格式
        return datetime.strptime(x, '%M:%S.%f')

完整使用示例

将修正后的函数传入pd.read_csv的date_parser参数即可:

import pandas as pd
from datetime import datetime

def timeparse_1(x):
    try:
        return datetime.strptime(x, '%H:%M:%S.%f')
    except ValueError:
        return datetime.strptime(x, '%M:%S.%f')

lap_times = pd.read_csv(
    'data/lap_times.csv',
    parse_dates={'time_datetime': ['time']}, 
    date_parser=timeparse_1
)

扩展优化方案

如果后续可能出现更多时间格式,可以通过遍历格式列表的方式批量尝试解析,提升兼容性:

def timeparse_1(x):
    # 按优先级排列可能的时间格式
    time_formats = ['%H:%M:%S.%f', '%M:%S.%f', '%S.%f']
    for fmt in time_formats:
        try:
            return datetime.strptime(x, fmt)
        except ValueError:
            continue
    # 所有格式匹配失败时,抛出明确错误
    raise ValueError(f"无法解析时间字符串: {x}")

内容的提问来源于stack exchange,提问作者Andre Luiz Moura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:35:21