pd.read_excel读取Excel时日期字符串转整数的解决方法
Excel日期序列号转dd/mm/yyyy格式的解决方案
问题根源
你看到的整数(比如43800)是Excel的日期序列号,它的基准本应是1900-01-01,但由于Excel的历史bug(误把1900年判定为闰年),实际对应的起始日期是1899-12-30。之前的代码把这些整数当成了Unix时间戳(以1970-01-01为基准),所以才会全部输出01/01/1970。
两种解决方法
方法1:读取文件时直接解析日期
在pd.read_excel中直接指定要解析的日期列,同时适配Excel的日期规则:
import pandas as pd # 替换为你的文件路径和目标日期列名 client_entity_df = pd.read_excel( "your_file.xlsx", parse_dates=["成立日期", "其他日期列"], date_parser=lambda x: pd.to_datetime(x, origin="1899-12-30", unit="D") ) # 按需转成dd/mm/yyyy格式的字符串 for col in columns_with_date_string: client_entity_df[col] = client_entity_df[col].dt.strftime("%d/%m/%Y")
方法2:读取后转换已有的整数列
如果数据已经读到DataFrame中,直接对整数格式的日期列做转换:
for col in columns_with_date_string: # 将Excel序列号转为datetime对象 client_entity_df[col] = pd.to_datetime( client_entity_df[col], origin="1899-12-30", unit="D" ) # 转成dd/mm/yyyy格式的字符串 client_entity_df[col] = client_entity_df[col].dt.strftime("%d/%m/%Y")
额外提示
- 如果后续需要进行日期计算(比如加减天数、筛选区间),建议保留
datetime类型,跳过strftime转换步骤。 - 可以先拿单个值验证逻辑:执行
pd.to_datetime(43800, origin="1899-12-30", unit="D"),应该得到Excel中对应的正确日期。
内容的提问来源于stack exchange,提问作者Babayega
相关产品推荐
相关产品推荐

