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

Python中XLSB转CSV日期类型错误:2022变为2092求助

XLSB转CSV日期偏移(2022变2092)问题解决

问题根源

  1. 代码逻辑错误:原代码先读取XLSB文件,随即用pd.read_csv覆盖了变量,等于完全没处理目标XLSB文件,反而操作了一个无关的CSV。
  2. 日期解析偏移:Excel的日期存储为从1899-12-30开始的序列化数值(因1900年闰年bug),而astype('datetime64[D]')默认以1970-01-01为起始,直接转换会导致日期偏移70年(2022+70=2092)。

修正方案

方案1:读取时直接解析日期

利用read_excel的parse_dates参数,让pyxlsb直接将指定列解析为datetime类型:

import pandas as pd

# 读取XLSB并解析日期列
df = pd.read_excel('./date_error.xlsb', engine='pyxlsb', sheet_name='date', parse_dates=['Date1', 'Date2'])

# 导出为CSV
df.to_csv('./test.csv', index=False)

方案2:手动转换Excel序列化日期

如果parse_dates不生效,手动将Excel日期数值转换为datetime:

import pandas as pd
from datetime import datetime, timedelta

df = pd.read_excel('./date_error.xlsb', engine='pyxlsb', sheet_name='date')

# 定义转换函数:Excel日期转Python datetime
def excel_to_datetime(excel_num):
    excel_start = datetime(1899, 12, 30)
    return excel_start + timedelta(days=excel_num)

# 批量转换日期列
df['Date1'] = df['Date1'].apply(excel_to_datetime)
df['Date2'] = df['Date2'].apply(excel_to_datetime)

# 导出CSV
df.to_csv('./test.csv', index=False)

验证

打开生成的test.csv,检查日期列是否显示为2022-xx-xx格式,确认年份正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:18