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

移除DataFrame日期列字符串列表中的冗余文本问题求助

日期字符串列表清洗方案

现有DataFrame

Id                                            dates
01         ['ATIVE 04/2018 to 03/2020',' XYZ mar 2020 – Jul 2022','June 2021 - 2023 XYZ']

预期DataFrame

Id                                            dates
01         ['04/2018 to 03/2020','mar 2020 – Jul 2022','June 2021 - 2023']

问题说明

需要清洗dates列中的字符串列表,移除每个日期字符串里的无关文本(如ATIVE、XYZ这类非日期内容),但保留日期格式所需的符号(/、–、-、空格)及日期相关的字母数字。之前尝试的函数未达到预期效果,具体代码如下:

def clean_dates_list(dates_list):
    cleaned_dates_list = []
    for date_str in dates_list:
        cleaned_date_str = re.sub(r'[^A-Za-z\s\d]+', '', date_str)
        cleaned_dates_list.append(cleaned_date_str)
    return cleaned_dates_list

问题分析

原函数的正则表达式[^A-Za-z\s\d]+会把日期中必要的符号(比如/、–、-)也删除,同时无法精准定位并移除无关的单词(如ATIVE、XYZ),导致清洗结果不符合预期。

解决思路

方案1:精准移除首尾无关单词

针对每个日期字符串,匹配并移除开头或结尾的非日期单词,同时保留中间的日期结构:

import re

def clean_dates_list(dates_list):
    cleaned_dates_list = []
    # 匹配并移除开头的非日期单词(带可选空格)和结尾的非日期单词(带可选空格)
    pattern = r'^\s*[A-Za-z]+\s*|\s*[A-Za-z]+\s*$'
    for date_str in dates_list:
        cleaned_date_str = re.sub(pattern, '', date_str)
        cleaned_dates_list.append(cleaned_date_str)
    return cleaned_dates_list

方案2:保留日期相关字符及结构

如果无关文本可能出现在任意位置,可先保留所有日期相关的字符(字母、数字、空格、/、–、-、to),再清理多余空格:

import re

def clean_dates_list(dates_list):
    cleaned_dates_list = []
    # 保留日期允许的字符,替换其他为空
    pattern = r'[^A-Za-z\s\d/–-to]'
    for date_str in dates_list:
        # 先替换无关字符
        temp = re.sub(pattern, '', date_str)
        # 清理多余的连续空格
        cleaned_date_str = re.sub(r'\s+', ' ', temp).strip()
        cleaned_dates_list.append(cleaned_date_str)
    return cleaned_dates_list

方案3:基于日期格式匹配提取

如果日期格式相对固定,可直接提取符合日期格式的部分:

import re

def clean_dates_list(dates_list):
    cleaned_dates_list = []
    # 匹配常见的日期范围格式
    pattern = r'(\d{2}/\d{4}\s+to\s+\d{2}/\d{4}|[A-Za-z]{3,}\s+\d{4}\s+[–-]\s+[A-Za-z]{3,}\s+\d{4}|[A-Za-z]{3,}\s+\d{4}\s+-\s+\d{4})'
    for date_str in dates_list:
        match = re.search(pattern, date_str)
        if match:
            cleaned_dates_list.append(match.group().strip())
        else:
            cleaned_dates_list.append(date_str.strip())
    return cleaned_dates_list

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:25:22