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

使用Pandas读取Excel时间字段时毫秒精度不准确该如何解决

精度偏差产生原因
  • Excel内部的时间、时长字段本质以浮点型存储:整数部分代表距离1900年1月1日的天数,小数部分代表当日时间占比,毫秒级的极小小数在二进制浮点存储规则下存在固有精度损失。
  • pandas默认读取Excel时间字段时,自动转换逻辑会采用默认舍入规则,且对400米用时这类时长类非日期时间值适配度较低,进一步放大了毫秒维度的精度偏差。
解决方法

方法1:读取时禁用自动类型转换,手动转换为时间间隔类型

强制该列以原始格式读取,再通过pandas内置的时间间隔转换方法保留精度:

import pandas as pd

excel_file_name = 'All.xlsx'
df_athletes = pd.read_excel(
    excel_file_name,
    sheet_name='Athletes',
    dtype={'400M': object}  # 强制该列不触发自动时间转换
)
# 手动转换为时间间隔类型,完整保留毫秒精度
df_athletes['400M'] = pd.to_timedelta(df_athletes['400M'].astype(str))

# 打印验证
print(df_athletes['400M'])

方法2:基于Excel原生存储规则直接计算(精度更高)

直接读取Excel存储的原始浮点值,按照Excel时间的换算规则手动转成时间间隔,完全避免转换误差:

import pandas as pd

excel_file_name = 'All.xlsx'
df_athletes = pd.read_excel(
    excel_file_name,
    sheet_name='Athletes',
    # 按Excel存储规则换算:浮点值*86400=总秒数,转时间间隔
    converters={'400M': lambda x: pd.to_timedelta(x * 86400, unit='s') if pd.notna(x) else pd.NA}
)

# 打印验证
print(df_athletes['400M'])

补充说明

如果仍存在偏差,可以将pandas、openpyxl依赖升级到最新版本,修复已知的时间转换类bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:15:02