如何正确处理pandas中的Date列,将'Jun 2021'批量转换为'2021-06'格式
Pandas 月份格式转换解决方案
核心转换代码
直接使用指定格式的日期转换逻辑,避免自动推断带来的匹配错误:
- 第一步:将原
object类型的日期列转为datetime类型,明确指定输入格式为英文月份缩写+4位年份
# %b 匹配英文月份缩写(如Jun、Dec),%Y 匹配4位年份 df['Date'] = pd.to_datetime(df['Date'], format='%b %Y', errors='coerce')
添加errors='coerce'参数后,格式异常的行会被转为NaT空值,不会直接中断转换流程,方便后续排查异常数据。
- 第二步:将
datetime类型的列格式化为YYYY-MM格式的字符串
df['Date'] = df['Date'].dt.strftime('%Y-%m')
常见报错排查方向
如果执行上述代码仍有报错,可按以下顺序排查:
- 先筛查原Date列的异常值:执行
print(df[df['Date'].apply(lambda x: not isinstance(x, str) or len(x.strip()) < 8)]),检查是否存在空值、数字类型值、长度不符合规范的异常内容,修正后再重新转换。 - 若系统为中文locale导致无法识别英文月份缩写,可在转换前临时切换时间locale为英文:
import locale # 临时指定时间识别规则为英文 original_locale = locale.getlocale(locale.LC_TIME) locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') # 执行上面的两步转换代码 # 转换完成后切回原locale locale.setlocale(locale.LC_TIME, original_locale)
- 检查是否存在非标准月份缩写,比如自定义缩写
Jn代替Jun这类错误,批量修正后再执行转换即可。
内容的提问来源于stack exchange,提问作者Ricachu
相关产品推荐
相关产品推荐

