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

如何移除DataFrame中格式不一致的重复数据

姓名格式不一致的重复数据清洗方案

核心思路是先将所有姓名转换为统一规则的标准化标识,再基于该标识去重,具体操作步骤如下:

  • 首先编写姓名标准化规则,统一解析不同格式的姓名结构:
    1. 若姓名包含逗号,判定为「姓, 名 中间名缩写」格式,按逗号拆分为姓、名+中间名两部分
    2. 若姓名不包含逗号,判定为「名 中间名缩写 姓」格式,按空格拆分后取最后一段为姓,其余部分拼接为名+中间名
  • 对解析后的姓、名部分做归一化处理:统一转为小写、去除多余标点和首尾空格,生成唯一的标准化标识
  • 基于标准化标识对数据集去重,可根据需求保留首次出现的记录、格式更规范的记录等

以下是常用的Python+pandas实现代码:

import pandas as pd

def standardize_name(name):
    # 基础清洗:统一小写、去除首尾空格
    name = name.strip().lower()
    if ',' in name:
        # 处理「姓, 名 中间名」格式
        last_name, rest = name.split(',', 1)
        rest = rest.strip()
    else:
        # 处理「名 中间名 姓」格式
        name_parts = name.split()
        last_name = name_parts[-1]
        rest = ' '.join(name_parts[:-1]).strip()
    # 去除多余标点,生成标准化键
    last_name = last_name.replace('.', '').strip()
    rest = rest.replace('.', '').strip()
    return f"{last_name}#{rest}"

# 示例数据读取,替换为你的数据集路径即可
df = pd.read_csv("your_dataset.csv")
# 生成标准化去重键
df["name_standard_key"] = df["Name"].apply(standardize_name)
# 去重,keep参数可调整为'last'保留最后一条,或者自定义规则保留
df_deduplicated = df.drop_duplicates(subset="name_standard_key", keep="first")
# 移除中间辅助列
df_deduplicated = df_deduplicated.drop(columns="name_standard_key")

注意事项

  • 如果存在中间名全拼和缩写共存的场景(如John David Doe和John D. Doe),可以在标准化函数中补充中间名首字母提取规则,进一步覆盖重复场景
  • 如果数据集包含带空格的特殊姓氏(如van der Sar、复姓等),需要提前梳理特殊姓氏列表,调整拆分逻辑避免拆分错误

内容的提问来源于stack exchange,提问作者John Patrick Laurel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:02