
本文详解如何在 pandas 中将仅含日+缩写月份(如“28 jul”)且无年份、使用巴西葡萄牙语(pt_br)的字符串列可靠转换为 datetime 类型,解决因系统 locale 不匹配导致的解析失败与 nat 问题,并支持灵活补全年份。
本文详解如何在 pandas 中将仅含日+缩写月份(如“28 jul”)且无年份、使用巴西葡萄牙语(pt_br)的字符串列可靠转换为 datetime 类型,解决因系统 locale 不匹配导致的解析失败与 nat 问题,并支持灵活补全年份。
在处理来自巴西本地金融或账单系统的数据时,常见日期格式如 "28 JUL"、"04 AGO"(即“JUL”代表 julho,“AGO”代表 agosto),这类字符串无法被 pd.to_datetime() 默认识别——因为 Python 的 datetime 模块依赖系统 locale 来解析月份缩写,而多数英文环境(如 en_US)不支持 AGO、OUT、DEZ 等葡萄牙语缩写,直接使用 format="%d %b" 会导致大量 NaT(Not a Time)值。
✅ 正确做法:配置 pt_BR locale 并解析
首先需确保系统已安装 pt_BR.UTF-8 locale(Linux/macOS 通常可通过 locale -a | grep pt_BR 验证;Windows 用户建议使用 WSL 或改用 dateutil 兼容方案,见后文)。然后执行:
import locale import pandas as pd # 设置巴西葡萄牙语 locale(关键步骤!) locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') # 假设原始列名为 'Data' df['Data_converted'] = pd.to_datetime(df['Data'], format='%d %b', errors='coerce')
⚠️ 注意:errors='coerce' 会将无法解析的值转为 NaT,便于后续排查;若需保留原始字符串用于调试,可先用 .str.upper() 统一大小写(如 "ago" → "AGO"),避免大小写敏感问题。
? 补全年份:添加固定年份前缀(推荐)
由于原始数据不含年份,Pandas 默认填充为 1900(如 1900-07-28),这显然不符合业务逻辑。更合理的方式是显式拼接目标年份:
# 假设所有记录属于 2025 年
df['Data_converted'] = pd.to_datetime('2025 ' + df['Data'], format='%Y %d %b', errors='coerce')
此方法绕过 locale 依赖,稳定可靠,输出为标准 datetime64[ns] 类型,支持排序、时间差计算、dt 访问器等全部 Pandas 时间序列操作。
? 替代方案(无需修改系统 locale)
若无法配置 locale(如共享服务器、Windows 生产环境),可使用 dateutil.parser + 自定义映射,或借助 pandas.Series.replace 预处理:
# 方案2:手动映射月份缩写(轻量、跨平台)
month_map = {'JAN': 'Jan', 'FEV': 'Feb', 'MAR': 'Mar', 'ABR': 'Apr',
'MAI': 'May', 'JUN': 'Jun', 'JUL': 'Jul', 'AGO': 'Aug',
'SET': 'Sep', 'OUT': 'Oct', 'NOV': 'Nov', 'DEZ': 'Dec'}
df['Data_clean'] = df['Data'].str.strip().str.upper().replace(
{rf'(\d+)\s+({ "|".join(month_map.keys()) })': r'\1 \2'},
regex=True
).replace({f'{k}': v for k, v in month_map.items()}, regex=True)
df['Data_converted'] = pd.to_datetime('2025 ' + df['Data_clean'],
format='%Y %d %b', errors='coerce')
✅ 最终验证与建议
转换后务必检查:
- 是否仍有
NaT?定位并清洗异常值(如"00 AGO"、空格/符号干扰); - 使用
df['Data_converted'].dt.year.unique()确认年份统一; - 对齐业务上下文:若数据横跨多年,应基于其他字段(如文件名、导入时间)动态推断年份,而非硬编码。
总结:解析非英语缩写日期的核心在于 locale 一致性 或 显式文本标准化。优先推荐
'2025 ' + col拼接法——简洁、可控、免依赖,是生产环境中最稳健的实践。










