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

Pandas如何将自定义英文日期格式转换为datetime(西班牙语locale环境)

问题核心原因&解决方案

你不需要提前把日期转换为%m/%d/%Y格式,只需要修复两个错误就能直接解析:

  1. 格式字符串书写错误
    你当前使用的%b %m, %Y是逻辑错误的:%m代表数字格式的月份,而你日期字符串中第二个字段是日期(比如Jan 20, 2019里的20是日),应该替换为%d,正确的格式串为%b %d, %Y。
    你之前测试Feb 01, 2019看似解析成功只是巧合,实际解析结果是错误的:%b识别到Feb对应2月,%m又把月份覆盖为1月,最终结果和预期完全不符。

  2. locale设置不生效问题
    标准库locale的全局设置对pandas的to_datetime函数适配性很差,不同系统的locale命名规则也不一样,你写的'EN'大部分环境都无法正确识别。
    推荐两种适配性更高的处理方案:

方案1:pandas 2.0+直接指定locale参数(优先选择)

不需要修改全局locale,直接在to_datetime方法中传入locale参数即可,根据你的系统选对应写法:

# Unix/Linux/macOS 环境
import pandas as pd
df['Date'] = pd.to_datetime(df['Date'], format='%b %d, %Y', locale='en_US.UTF-8')

# Windows 环境
df['Date'] = pd.to_datetime(df['Date'], format='%b %d, %Y', locale='English_US')

方案2:低版本pandas用dateutil自定义月份解析

如果你的pandas版本低于2.0,不支持locale参数,可以手动定义英文月份映射解析,完全不依赖系统locale:

from dateutil.parser import parse
from dateutil.parser import parserinfo

# 自定义英文月份解析规则
class ENMonthParser(parserinfo):
    MONTHS = [
        ('Jan', 'January'), ('Feb', 'February'), ('Mar', 'March'),
        ('Apr', 'April'), ('May', 'May'), ('Jun', 'June'),
        ('Jul', 'July'), ('Aug', 'August'), ('Sep', 'September'),
        ('Oct', 'October'), ('Nov', 'November'), ('Dec', 'December')
    ]

# 应用到整个Date列
df['Date'] = df['Date'].apply(lambda x: parse(x, parserinfo=ENMonthParser()))

两种方案都能稳定解析你手里的英文格式日期,性能远高于手动做字符串格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:02