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

为何用Pandas读取XLSB文件时日期变为奇怪数字?

为什么Pandas读取XLSB文件时日期变成了奇怪的数字?

那些数字是Excel的日期序列号——Excel默认采用1900日期系统,把日期存储为从1900年1月1日起算的天数:

  • 44927 = 2023年1月1日(1900-01-01到2023-01-01的总天数)
  • 45178 = 2023年9月9日

出现这个问题的核心原因:
XLSB是二进制Excel格式,Pandas的pd.read_excel默认不会自动识别转换这类日期序列号;再加上你的列中存在非日期值(-),Pandas会将整个列判定为object类型,直接保留Excel的原始存储值。

解决方法

方法1:自动解析日期并处理缺失值

用parse_dates指定要解析的列,同时通过na_values把-标记为缺失值,让列能被正确转为日期类型:

from pathlib import WindowsPath
import pandas as pd

p = WindowsPath(r'C:\Users\data\book.xlsb')
df = pd.read_excel(p, parse_dates=['ird'], na_values=['-'])
print(df)
print(df.dtypes)

执行结果:

ird
0 2023-01-01
1 2023-09-09
2        NaT
ird    datetime64[ns]
dtype: object

方法2:自定义转换保留原始特殊值

如果需要保留-而不是转为缺失值,可以用converters自定义转换逻辑:

from pathlib import WindowsPath
import pandas as pd
from datetime import datetime

def convert_excel_serial(val):
    if val == '-':
        return val
    try:
        # 修正Excel 1900日期系统的闰年bug,用1899-12-30作为起始偏移
        return datetime(1899, 12, 30) + pd.Timedelta(days=val)
    except:
        return val

p = WindowsPath(r'C:\Users\data\book.xlsb')
df = pd.read_excel(p, converters={'ird': convert_excel_serial})
print(df)
print(df.dtypes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:04