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

Python中将毫秒时间戳转换为datetime的时长计算异常问题

问题排查与代码修正

核心问题分析

你遇到的时长异常,大概率和代码的低效循环、时间计算的冗余操作有关,也可能是time.stamp的单位或数据本身存在偏差。先从代码优化和问题排查入手:

第一步:排查原始数据

先确认time.stamp的最大值是否符合预期:

print(df['time.stamp'].max())

60分钟的10Hz采样对应的最大偏移毫秒数应为60*60*1000=3600000。如果输出远小于这个值,说明原始数据的time.stamp本身有问题;如果数值符合,再看时间计算逻辑。

修正后的代码

替换原循环逻辑,用pandas矢量化操作更高效可靠:

import os
import pandas as pd
from datetime import datetime

flist = os.listdir(data_files)
for f in flist:
    # 读取文件,用os.path.join避免路径拼接错误
    df = pd.read_csv(os.path.join(data_files, f))
    # 从文件名解析起始时间
    yyyymmdd, hhmm, _ = f.split(".")
    # 直接构造起始datetime对象,避免字符串解析的冗余和错误
    start_dt = datetime(
        year=int(yyyymmdd[:4]),
        month=int(yyyymmdd[4:6]),
        day=int(yyyymmdd[6:8]),
        hour=int(hhmm[:2]),
        minute=int(hhmm[2:4]),
        second=0  # 若实际起始秒不为0,替换为对应数值
    )
    # 矢量化计算所有时间戳,比循环快数十倍
    df['datetime'] = start_dt + pd.to_timedelta(df['time.stamp'], unit='ms')
    # 格式化为yyyy-mm-dd hh:min:sec.milliseconds格式
    # %f是6位微秒,[:-3]截取前3位转为毫秒
    df['datetime'] = df['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3]
    # 保存文件
    df.to_csv(os.path.normpath(os.path.join(data_dummy_files, f)), index=False)

额外排查点

如果修正后时长仍异常,检查以下两点:

  • 确认time.stamp的单位:如果实际是秒,把unit='ms'改成unit='s';如果是微秒,改成unit='us'。
  • 检查数据行数:60分钟10Hz采样应有60*60*10=36000行,若行数只有2400行(对应4分钟),说明原始数据文件不完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:30:42