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

Pandas解析含可变格式的亚秒级精度时间戳列问题

解决Pandas解析混合格式时间戳(整秒/亚秒)的原生高效方案
  • 方法1:使用多格式列表(Pandas 1.3.0+推荐)
    Pandas 1.3.0及以上版本支持给pd.to_datetime的format参数传入格式列表,会依次尝试每个格式进行转换,完全原生且性能最优:

    import pandas as pd
    
    # 方式1:读取CSV时直接解析时间列
    df = pd.read_csv('your_dataset.csv', parse_dates=['timestamp'], format=['%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S'])
    
    # 方式2:读取后单独处理时间列
    df = pd.read_csv('your_dataset.csv')
    df['timestamp'] = pd.to_datetime(df['timestamp'], format=['%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S'])
    

    这个方法无需额外逻辑,Pandas底层会批量处理所有匹配的格式,性能接近单一格式解析的速度。

  • 方法2:分两步转换(兼容低版本Pandas)
    如果你的Pandas版本低于1.3.0,可以先尝试解析亚秒格式,再用整秒格式填充转换失败的NaT值,全程用原生操作避免循环:

    import pandas as pd
    
    df = pd.read_csv('your_dataset.csv')
    # 先尝试解析亚秒格式,失败的转为NaT
    df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d %H:%M:%S.%f', errors='coerce')
    # 筛选出NaT的行,用整秒格式重新解析
    na_mask = df['timestamp'].isna()
    df.loc[na_mask, 'timestamp'] = pd.to_datetime(df.loc[na_mask, 'timestamp'], format='%Y-%m-%d %H:%M:%S')
    

    这种方法通过向量操作批量处理,性能远高于自定义Python函数。

  • 方法3:自动推断格式(最简写法)
    利用Pandas的infer_datetime_format=True参数,让系统自动识别时间格式,对于这种仅差亚秒后缀的混合格式,推断准确率很高:

    import pandas as pd
    
    df = pd.read_csv('your_dataset.csv', parse_dates=['timestamp'], infer_datetime_format=True)
    

    该方法无需手动指定格式,Pandas会先分析前几行的格式特征,然后批量转换,性能优于自定义函数,适合快速处理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:25:55