使用pd.to_datetime转换19-SEP-22日期报错,请求排查原因
问题排查与解决方案
你的格式符逻辑本身是对的——%d对应日、%b对应英文月份缩写、%y对应两位年份,报错的核心原因是Python环境的区域设置(locale)不是英文,导致无法识别SEP这种英文月份缩写。
解决方法1:指定英文区域解析
在pd.to_datetime中通过locale参数指定英文区域,让函数能识别英文月份缩写:
import pandas as pd import locale # 设置英文区域(不同系统可能略有差异,Windows可用'English_US') locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') df['date'] = pd.to_datetime(df.date, format='%d-%b-%y') df['date'] = df['date'].dt.strftime('%d/%m/%Y')
如果运行时提示locale不存在,可以试试其他英文区域标识,比如'en_GB.UTF-8'(英式英文),Windows系统通常用'English_US'或'en-US'。
解决方法2:不依赖locale的兼容写法
如果不想折腾区域设置,可以用dateutil.parser来自动识别日期格式(需要先安装python-dateutil:pip install python-dateutil):
from dateutil.parser import parse import pandas as pd df['date'] = df['date'].apply(lambda x: parse(x)) df['date'] = df['date'].dt.strftime('%d/%m/%Y')
这个方法不需要指定格式符,能自动识别多种日期格式,适合日期格式不统一的场景。
内容的提问来源于stack exchange,提问作者JGH_PC
相关产品推荐
相关产品推荐

