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

Python Pandas:移除含(Retired)标记的姓名及分隔符

问题描述

我有一个存储姓名的DataFrame(变量名为df)列,需要移除所有带有(Retired)或(retired)标记的姓名及其对应的分号;但标记格式不固定,有时单元格含多个姓名仅其中一个退休,有时名后直接跟退休标记再跟姓。尝试使用replace方法无效,寻求解决方向。

当前状态示例:

Owner Name
George (Georgy) (Retired) Clooney
Meghan (retired) Markle
Harry Porter (Retired)
Hermione Granger; Harry Porter (Retired)
Ginny Weasley; Ron Weasley; Harry Porter (retired); Luna Lovegood

期望状态示例:

Owner Name
Null
Null
Null
Hermione Granger
Ginny Weasley; Ron Weasley; Luna Lovegood
解决思路与代码实现

replace方法之所以无效,是因为它只能匹配固定字符串或简单正则,没法精准识别带退休标记的完整姓名项。这里提供两种可行的处理方案:

方法一:拆分过滤法(直观易理解)

核心思路是把每个单元格的姓名拆成列表,过滤掉带退休标记的项,再重新拼接:

  1. 按; 拆分每个单元格的姓名列表
  2. 剔除包含(Retired)或(retired)的姓名
  3. 拼接过滤后的结果,空内容则替换为Null

代码示例:

import pandas as pd

def filter_retired_names(names_str):
    if pd.isna(names_str):
        return 'Null'
    # 拆分姓名为列表
    names_list = names_str.split('; ')
    # 过滤掉带退休标记的姓名
    filtered_names = [name for name in names_list if not ('(Retired)' in name or '(retired)' in name)]
    # 拼接结果,空则返回Null
    return '; '.join(filtered_names) if filtered_names else 'Null'

# 应用到目标列
df['Owner Name'] = df['Owner Name'].apply(filter_retired_names)

方法二:正则替换法(高效简洁)

用正则表达式直接匹配并移除带退休标记的姓名项(包括前后关联的分号):

  • 正则(?:; )?[^;]*\(retired\)[^;]*(?:; )? 可以匹配:可选的前置; + 包含退休标记的任意姓名内容 + 可选的后置;
  • 用re.IGNORECASE忽略大小写,统一处理(Retired)和(retired)
  • 最后清理首尾残留的分号,空内容替换为Null

代码示例:

import pandas as pd
import re

def clean_retired_names(names_str):
    if pd.isna(names_str):
        return 'Null'
    # 匹配并移除带退休标记的姓名项
    cleaned = re.sub(r'(?:; )?[^;]*\(retired\)[^;]*(?:; )?', '', names_str, flags=re.IGNORECASE)
    # 清理首尾可能残留的分号和空格
    cleaned = cleaned.strip('; ')
    # 空内容返回Null
    return cleaned if cleaned else 'Null'

df['Owner Name'] = df['Owner Name'].apply(clean_retired_names)

两种方法都能实现需求:拆分过滤法逻辑直白,适合新手调试;正则法处理速度更快,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:55:34