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

如何读取Excel文件且不改变原有日期格式?

解决Excel日期读取保留原格式的问题

方法1:读取日期序列号后按原格式转换

Excel的日期本质是数值(序列号),col_types="text"会直接读取这个数值的文本形式,所以要先读取为数值,再根据原Excel的日期格式来格式化字符串。

示例代码:

import pandas as pd
from datetime import datetime

# 先读取数据,目标日期列按数值类型读取
df = pd.read_excel("your_file.xlsx", col_types={"date_column": "float"})

# 替换成你Excel里实际的日期格式,比如"yyyy年mm月dd日"或"mm/dd/yyyy"
df["date_column"] = df["date_column"].apply(
    lambda x: datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(x) - 2).strftime("%Y年%m月%d日")
)

注:Excel的日期序列号从1900-01-01开始,但存在闰年bug(误将1900年判定为闰年),所以要减2修正。若你的日期都在1900-03-01之后,减1也可正常工作,但减2适配所有情况。

方法2:用openpyxl直接读取单元格显示文本

使用openpyxl引擎可以直接读取单元格的显示值,无需手动处理序列号:

import pandas as pd
from openpyxl import load_workbook

# 先读取基础DataFrame
df = pd.read_excel("your_file.xlsx", engine="openpyxl")

# 加载工作簿,获取目标列的显示文本
wb = load_workbook("your_file.xlsx")
ws = wb.active

# 假设日期列是第2列(从1开始计数),跳过表头行
date_display_texts = [cell.value for cell in ws["B"][1:]]
# 替换DataFrame中的日期列
df["date_column"] = date_display_texts

更直接的方式,用openpyxl读取后直接构建DataFrame:

from openpyxl import load_workbook
import pandas as pd

# data_only=False 会读取单元格的显示格式而非计算后的值
wb = load_workbook("your_file.xlsx", data_only=False)
ws = wb.active

data = []
for row in ws.iter_rows(values_only=False):
    row_data = []
    for cell in row:
        if cell.data_type == 'd':
            # 用单元格自带的格式规则格式化日期值
            row_data.append(cell.number_format.format(cell.value))
        else:
            row_data.append(cell.value)
    data.append(row_data)

# 转成DataFrame,第一行作为表头
df = pd.DataFrame(data[1:], columns=[cell.value for cell in data[0]])

方法3:自定义date_parser解析函数

如果明确原日期的显示格式,可在读取时指定自定义解析函数,将序列号转成对应格式的字符串:

import pandas as pd
from datetime import datetime

def custom_date_parser(serial_num):
    # 将Excel序列号转成datetime,再格式化为目标字符串
    dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(serial_num) - 2)
    return dt.strftime("%m/%d/%Y")  # 替换为你的原日期格式

df = pd.read_excel("your_file.xlsx", parse_dates=["date_column"], date_parser=custom_date_parser)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:34:59