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

使用Pandas导入Excel时如何正确解析欧洲格式日期?

问题描述

作为数据工程师,在将Excel xlsx文件导入SQL Server数据库表时遇到以下问题:

  • 数据源采用**dd/mm/yyyy(欧洲格式)**输入日期
  • 当日份大于12时,Excel将日期识别为文本(例如31/03/2024),Pandas读取后能正确解析为2024-03-31
  • 当日份为12或更小时,Excel将其识别为日期类型(例如06/04/2024会被Excel识别为6月4日),Pandas读取后转为2024-06-04,与实际的4月6日不符
  • 无法在Excel存入目标文件夹前修改文件,需确保每次都能正确解析日期并导入数据库
解决方案

核心分析

Excel对日期的识别逻辑导致Pandas读取后出现两种格式:

  • 当Excel识别为日期类型(日份≤12),Pandas读取后转为yyyy-mm-dd HH:MM:SS格式的字符串
  • 当Excel无法识别为日期(日份>12),Pandas直接读取为dd/mm/yyyy格式的字符串

实现代码

通过自定义解析函数,统一处理两种格式的日期:

from datetime import datetime, timedelta
import pandas as pd

DATE_PATTERNS = ["%Y-%d-%m %H:%M:%S", "%d/%m/%Y"]

def excel_date_parser(val):
    """ 解析Excel日期类型转换后的字符串和dd/mm/yyyy格式的文本日期 """
    # 兼容Excel日期序列号(若读取时未指定dtype=str可能出现)
    if isinstance(val, float) or isinstance(val, int):
        return datetime(1899, 12, 30) + timedelta(days=val)
    else:
        try:
            return try_to_datetime(val)
        except Exception as e:
            print(f"解析{val}时出错: {e}")
            return None

def try_to_datetime(val):
    for fmt in DATE_PATTERNS:
        try:
            return pd.to_datetime(val, format=fmt, errors='raise')
        except:
            continue
    raise ValueError(f"无法解析日期值: {val}")

# 读取Excel时强制将Date列按字符串读取,避免自动转换
df = pd.read_excel("file_with_Euro_dates.xlsx", dtype={"Date": str})
# 应用自定义解析函数统一处理日期
df["Date"] = df["Date"].apply(excel_date_parser)
# 后续可将处理后的DataFrame导入SQL Server

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:46:04