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

pandas读取xlsb时Excel日期序列号转时间戳返回1970年异常

问题原因
  • 读取得到的44710.37680是Excel标准日期序列号:整数位为距1900年基准日的天数偏移,小数位为当日时分秒的占比,不是Unix时间戳。直接调用pd.Timestamp(x)默认按Unix时间戳(从1970-01-01起算的秒/毫秒偏移)解析,必然得到1970年的错误结果。
  • 读取后转存CSV再重新读入的流程属于冗余操作,可能额外引入精度丢失、类型识别偏差问题。
  • 读取.xlsb二进制格式文件需要提前安装pyxlsb依赖,否则pandas无法自动识别单元格格式,会直接返回原始序列号。
解决方案

方案1:读取阶段自动解析(优先选用)

直接在读取文件时指定日期解析参数,跳过中间转存步骤,一步拿到正确的日期类型:

import pandas as pd
# 提前执行 pip install pyxlsb 安装xlsb读取依赖
df = pd.read_excel(
    file,
    sheet_name='Raw',
    engine='pyxlsb',
    parse_dates=['First LogonTime'] # 指定需要解析为日期的列
)
# 如需转成指定格式的字符串,用dt接口直接处理即可
df['First LogonTime'] = df['First LogonTime'].dt.strftime('%Y-%m-%d %H:%M:%S')
print(df)

方案2:已读取到序列号的手动转换

如果已经完成文件读取、拿到了浮点型的日期序列号,用pandas的日期转换接口指定正确的单位和基准点即可:

df['First LogonTime'] = pd.to_datetime(
    df['First LogonTime'],
    unit='D', # 序列号单位为天
    origin='1899-12-30' # 修正Excel 1900闰年bug的基准偏移
).dt.strftime('%Y-%m-%d %H:%M:%S')

验证:对数值44710.37680执行上述转换,输出为2022-05-29 09:02:35,和预期的5/29/2022 9:02:36仅存在浮点计算带来的1秒级误差,属于正常范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:36