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

在Pandas DataFrame中将日期格式替换为英文月份字符串时遭遇报错的问题排查

解决Pandas DataFrame日期格式替换为英文月份全称的问题

我来帮你排查代码里的问题,并且给出修复方案。你的代码主要有两个核心问题:

问题1:字符串replace不支持正则匹配

你在apply里用了x.replace(正则表达式, 替换值),但Python原生字符串的replace方法只能替换固定字符串,不支持正则表达式,得用re.sub来实现正则替换。

问题2:date_format函数的异常处理不完整

  • 当文本里没有匹配到日期时(比如第三个示例/events/performances),match.search(url_link)会返回None,调用mo.group()直接报错。
  • try-except块后直接执行datetime.strptime(mo, "%Y-%m-%d"),如果try块里的解析失败(比如日期格式是YYYY-MM-DD的情况),这里会再次报错。

修复后的完整代码

import re
from datetime import datetime
import pandas as pd

def replace_date_with_month(match_obj):
    # 只在匹配到日期时执行处理
    if match_obj:
        date_str = match_obj.group()
        # 统一替换分隔符为-
        date_str = date_str.replace('/', '-')
        # 尝试两种常见的日期格式解析
        for fmt in ("%d-%m-%Y", "%Y-%m-%d"):
            try:
                dt = datetime.strptime(date_str, fmt)
                return dt.strftime("%B")  # 返回英文月份全称
            except ValueError:
                continue
    # 没匹配到或解析失败,返回原内容
    return match_obj.group() if match_obj else ""

texts = [["The date is 11/12/1998"],["The date is 11-12-1998"],["/events/performances"],["/events/2019/02/22/promedica-masterworks/brah"],["/events/performances/641/2019-10-13/dudamel"]]
df = pd.DataFrame(texts, columns = ['event'])

# 使用re.sub结合回调函数实现正则替换
df["date_format"] = df["event"].apply(lambda x: re.sub(r'\d{2,4}[/|-]\d{1,2}[/|-]\d{2,4}', replace_date_with_month, x))

验证结果

运行后df["date_format"]的结果和你的期望完全一致:

  • The date is December
  • The date is December
  • /events/performances
  • /events/February/promedica-masterworks/brah
  • /events/performances/641/October/dudamel

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:42:32