Pandas如何将自定义英文日期格式转换为datetime(西班牙语locale环境)
问题核心原因&解决方案
你不需要提前把日期转换为%m/%d/%Y格式,只需要修复两个错误就能直接解析:
格式字符串书写错误
你当前使用的%b %m, %Y是逻辑错误的:%m代表数字格式的月份,而你日期字符串中第二个字段是日期(比如Jan 20, 2019里的20是日),应该替换为%d,正确的格式串为%b %d, %Y。
你之前测试Feb 01, 2019看似解析成功只是巧合,实际解析结果是错误的:%b识别到Feb对应2月,%m又把月份覆盖为1月,最终结果和预期完全不符。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
相关产品推荐
相关产品推荐

