Python中XLSB转CSV日期类型错误:2022变为2092求助
XLSB转CSV日期偏移(2022变2092)问题解决
问题根源
- 代码逻辑错误:原代码先读取XLSB文件,随即用
pd.read_csv覆盖了变量,等于完全没处理目标XLSB文件,反而操作了一个无关的CSV。 - 日期解析偏移: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
相关产品推荐
相关产品推荐

