You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中将含两位年份的月年字符串转换为datetime类型

解决两位年份的字符串转datetime问题

问题分析

你遇到的核心问题是两位年份的世纪推断和明确解析格式。直接调用pd.to_datetime()时,pandas可能无法正确识别Jan-98这类格式的世纪归属,或者因格式推断模糊导致解析错误;而你第二次尝试的格式串%m-%Y缺少日期部分,也不符合期望输出。

解决方案

需要明确指定解析格式,并通过cutoff参数控制两位年份的世纪划分,最后格式化为目标字符串格式:

import pandas as pd

# 原始数据
data = {
    'month_year': [
        'Jan-98', 'Feb-98', 'Mar-99', 'Apr-99', 'May-99',
        'Oct-00', 'Nov-00', 'Jun-01', 'Aug-03', 'Sep-08',
        'Dec-21', 'Jul-22'
    ]
}
df = pd.DataFrame(data)

# 转换并格式化
df['month_year'] = pd.to_datetime(
    df['month_year'],
    format='%b-%y',  # 明确格式:月份缩写-两位年份
    cutoff=pd.Timestamp('2000-01-01')  # 指定世纪划分:<=00的年份归20xx,>00的归19xx
).dt.strftime('%d-%m-%Y')  # 格式化为日-月-年,日固定为01

print(df)

代码说明

  1. format='%b-%y':告诉pandas按「月份缩写(如Jan)-两位年份(如98)」的规则解析字符串,避免格式推断错误。
  2. cutoff=pd.Timestamp('2000-01-01'):控制世纪推断逻辑:两位年份值≤00时解析为20xx,>00时解析为19xx,完美匹配你的期望(98→1998,00→2000,21→2021)。
  3. dt.strftime('%d-%m-%Y'):将datetime对象格式化为「日-月-年」的字符串,其中%d固定为01(因为原始数据没有日期信息,默认取每月第一天)。

输出结果

month_year
0   01-01-1998
1   01-02-1998
2   01-03-1999
3   01-04-1999
4   01-05-1999
5   01-10-2000
6   01-11-2000
7   01-06-2001
8   01-08-2003
9   01-09-2008
10  01-12-2021
11  01-07-2022

内容的提问来源于stack exchange,提问作者Danish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:06:19