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

Python中Pandas读取.xlsb文件日期列转为int64的问题求助

解决Pandas读取xlsb文件时日期列转为整数的问题

问题场景

使用Pandas结合pyxlsb引擎读取.xlsb文件时,日期列被识别为int64类型的五位整数,而非实际日期格式。手动将工作表另存为.xlsx虽能正常读取日期,但批量处理效率极低。需求是将该列转为datetime或字符串类型,无需保留整数形式。

用户当前代码:

# Import Libraries
from pdb import pm
import pandas as pd
import pyxlsb
from sqlalchemy import create_engine
import urllib
import pyodbc


# Read Excel File
df = pd.read_excel(r'\\filepath\filename.xlsb', sheet_name='my_sheet', index_col=0, engine='pyxlsb')

df['Date']

执行后Date列输出:

Date
45291
44561
44561
43830
44196

执行df['Date'].dtype返回:

dtype('int64')

另存为.xlsx后读取的实际日期示例:

12/31/2023
1      12/31/2021
2      12/31/2021
3      12/31/2019
4      12/31/2020
          ...    
405    08/31/2023
406    09/30/2023
407    09/30/2023
408    08/31/2023
409    12/31/2023

解决方案

方法1:读取后快速转换为datetime/字符串类型

利用Pandas的to_datetime函数,结合Excel日期的起始基准(1899-12-30)完成转换:

# 将整数转为datetime类型
df['Date'] = pd.to_datetime(df['Date'], unit='D', origin='1899-12-30')

# 若需要转为指定格式的字符串(如MM/DD/YYYY)
df['Date'] = df['Date'].dt.strftime('%m/%d/%Y')

方法2:读取时直接解析日期(pyxlsb原生处理)

如果需要更精准的读取控制,可使用pyxlsb原生API读取单元格的日期属性:

from pyxlsb import open_workbook

with open_workbook(r'\\filepath\filename.xlsb') as wb:
    with wb.get_sheet('my_sheet') as sheet:
        # 读取表头
        header = [cell.v for cell in next(sheet.rows)]
        data_rows = []
        # 遍历数据行
        for row in sheet.rows:
            # 假设Date列是第2列(对应原index_col=0后的第一列)
            raw_date = row[1].v
            # 转换为datetime
            converted_date = pd.to_datetime(raw_date, unit='D', origin='1899-12-30')
            # 收集整行数据
            data_rows.append([row[0].v, converted_date] + [cell.v for cell in row[2:]])

# 转为DataFrame
df = pd.DataFrame(data_rows, columns=header)

验证转换结果

转换后可通过以下代码确认结果:

# 查看列类型
print(df['Date'].dtype)
# 查看转换后的数据
print(df['Date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:33:26