如何在Python Pandas中将含非英文月份缩写的日期转为可读格式?
解决Pandas中波兰语月份缩写转日期格式的问题
你遇到的错误是因为pd.to_datetime的%b格式符默认使用英文 locale,无法识别波兰语的月份缩写(如sty、kwi),导致时间字符串匹配失败。下面提供两种可行的解决方法:
方法一:手动替换波兰语月份缩写为英文
这种方法不依赖系统locale,兼容性更强,适合已知少量波兰语月份缩写的场景:
import pandas as pd # 定义波兰语到英文月份缩写的映射字典 pl_en_month_map = { 'sty': 'Jan', 'kwi': 'Apr', 'mar': 'Mar' # 若有其他波兰语月份缩写,可继续补充键值对 } # 替换HOLIDAY列中的波兰语月份缩写 df['HOLIDAY'] = df['HOLIDAY'].replace(pl_en_month_map, regex=True) # 转换为日期对象并格式化为dd-mm-yyyy字符串 df['HOLIDAY'] = pd.to_datetime(df['HOLIDAY'] + " " + df['YEAR'], format='%d %b %Y').dt.strftime('%d-%m-%Y')
方法二:设置波兰语locale
如果需要处理大量波兰语月份缩写,可以通过设置系统的波兰语locale来让%b识别对应缩写,但注意不同系统的locale名称可能不同:
import pandas as pd import locale # 尝试设置波兰语locale(Windows系统可用'pl_PL',Linux/macOS可用'pl_PL.UTF-8') try: locale.setlocale(locale.LC_TIME, 'pl_PL.UTF-8') except locale.Error: locale.setlocale(locale.LC_TIME, 'pl_PL') # 转换日期并格式化 df['HOLIDAY'] = pd.to_datetime(df['HOLIDAY'] + " " + df['YEAR'], format='%d %b %Y').dt.strftime('%d-%m-%Y') # 可选:恢复系统默认locale locale.setlocale(locale.LC_TIME, '')
验证结果
处理后你的DataFrame会输出符合预期的格式:
| ID | HOLIDAY | YEAR |
|---|---|---|
| 111 | 01-01-2022 | 2022 |
| 222 | 20-04-2022 | 2022 |
| 333 | 08-03-2022 | 2022 |
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

