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

Python:如何将DataFrame中'JAN07'/'200701'格式日期转为'01-2007'

如何在Python DataFrame中将'JAN07'或'200701'格式的日期转为'01-2007'?

绝对有简便方法!不管是用pandas自带的日期处理工具,还是正则表达式都能轻松搞定,我给你分两种场景详细说:

方法一:用pandas自带的日期解析(最简便)

pandas的pd.to_datetime()函数非常智能,能自动识别你提到的这两种日期格式,之后再格式化输出就行,代码超简洁:

import pandas as pd

# 构造测试数据
df = pd.DataFrame({'date': ['JAN07', 'FEB08', '200701', '200802']})

# 第一步:转换为datetime类型;第二步:格式化为'月份-年份'的形式
df['formatted_date'] = pd.to_datetime(df['date']).dt.strftime('%m-%Y')

运行后你会得到预期的结果:

dateformatted_date
JAN0701-2007
FEB0802-2008
20070101-2007
20080202-2008

小提示:如果你的两位年份是90年代及以前(比如'JAN99'),pd.to_datetime()默认会解析成1999年,但如果需要强制解析为2099,可以通过format参数或者自定义解析逻辑调整,不过大部分场景下自动解析足够用。

方法二:用正则表达式手动匹配(更灵活)

如果你的数据里有更多复杂格式,或者想完全手动控制匹配逻辑,正则表达式是绝佳选择。我们可以针对两种日期格式分别写匹配规则:

import re
import pandas as pd

df = pd.DataFrame({'date': ['JAN07', 'FEB08', '200701', '200802']})

# 先定义月份缩写到两位数字的映射
month_abbr_to_num = {
    'JAN': '01', 'FEB': '02', 'MAR': '03', 'APR': '04',
    'MAY': '05', 'JUN': '06', 'JUL': '07', 'AUG': '08',
    'SEP': '09', 'OCT': '10', 'NOV': '11', 'DEC': '12'
}

# 自定义格式化函数,用正则匹配两种格式
def parse_and_format_date(date_str):
    # 匹配'JAN07'这类:3位大写字母+2位数字
    match_month_year = re.match(r'^([A-Z]{3})(\d{2})$', date_str)
    if match_month_year:
        month_abbr = match_month_year.group(1)
        year = f'20{match_month_year.group(2)}'  # 补全为4位年份
        return f'{month_abbr_to_num[month_abbr]}-{year}'
    
    # 匹配'200701'这类:4位数字+2位数字
    match_year_month = re.match(r'^(\d{4})(\d{2})$', date_str)
    if match_year_month:
        year = match_year_month.group(1)
        month = match_year_month.group(2)
        return f'{month}-{year}'
    
    # 处理无法匹配的异常情况
    return date_str

# 应用到DataFrame的列上
df['formatted_date'] = df['date'].apply(parse_and_format_date)

这个方法的好处是完全可控,哪怕后续新增其他日期格式,只要加对应的正则匹配规则就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:28