讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Pandas 中稳健合并存在名称拼写与日期偏差的多源球员数据

云瑶大大_7078

云瑶大大_7078

发布时间:2026-07-11 19:44:36

|

634人浏览过

|

来源于php中文网

原创

如何在 Pandas 中稳健合并存在名称拼写与日期偏差的多源球员数据

本文介绍使用模糊匹配(fuzzywuzzy)结合日期容差策略,精准关联来自不同数据源、存在姓名变体和出生日期微小差异的球员数据表。

本文介绍使用模糊匹配(fuzzywuzzy)结合日期容差策略,精准关联来自不同数据源、存在姓名变体和出生日期微小差异的球员数据表。

在实际数据分析中,常需整合多个独立采集的球员数据集(如体能统计 SC 与追踪统计 SB),但二者往往因命名规范不一、字段精度差异(如全名 vs 昵称、出生日期录入误差±1天)而无法直接基于 Player ID 或 Player 字段进行精确合并。此时,硬性要求字段完全一致会导致合并失败或遗漏关键记录。解决这一问题的核心思路是:放弃唯一键强匹配,转而构建多维度、带容错的软匹配逻辑。

1. 姓名模糊匹配:用相似度分数替代精确相等

fuzzywuzzy.process.extractOne() 可为每个 SC['Player'] 在 SB['Player'] 中查找最相似的候选,并返回匹配字符串及 0–100 的相似度得分(Levenshtein 距离计算)。设定合理阈值(如 threshold=70)可过滤低置信度匹配,避免误连。例如:

  • 'Cristiano Ronaldo' → 'Cristiano Ronaldo dos Santos Aveiro'(得分 90)✅
  • 'Leo Messi' → 'Lionel Messi'(得分 76)✅(虽非完全一致,但语义高度吻合)
  • 'Erling Haaland' → 'Erling Haland'(得分 96)✅(典型拼写变体)

2. 出生日期容差匹配:允许 ±N 天偏差

直接比较 D.O.B. 字符串易因格式或录入误差失败。应统一转为 datetime 类型,并通过时间窗口扩展实现柔性对齐:

Pandas Linux版 2.3.3
Pandas Linux版 2.3.3

Pandas 2.3.3 历史版本下载,来自 PyPI 官方发布,适合旧项目兼容、数据分析脚本复现和指定环境安装。

下载
# 构造包含 ±1 天偏移的 SB 日期副本(共3行/原始行)
df2_expanded = pd.concat([
    df2.assign(**{'D.O.B.': df2['D.O.B.'] + timedelta(days=i)})
    for i in range(-1, 2)  # -1, 0, +1
])

此操作将 SB 表中每条记录按日期偏移展开,使 1987-06-24(SC)能匹配 1987-06-23(SB 原始值)——只需一次 merge 即可捕获该容差关系。

3. 完整稳健合并流程(代码实现)

import pandas as pd
from fuzzywuzzy import process
from datetime import timedelta

def fuzzy_merge_players(df_sc, df_sb, 
                        name_col_sc='Player', name_col_sb='Player',
                        dob_col_sc='D.O.B.', dob_col_sb='D.O.B.',
                        threshold=70, date_tolerance_days=1):
    # 步骤1:姓名模糊匹配并打分
    matches = df_sc[name_col_sc].apply(
        lambda x: process.extractOne(x, df_sb[name_col_sb])
    )
    df_sc = df_sc.copy()
    df_sc['match_name'] = matches.apply(lambda x: x[0] if x[1] >= threshold else None)
    df_sc['match_score'] = matches.apply(lambda x: x[1] if x[1] >= threshold else None)

    # 步骤2:日期标准化与容差扩展
    df_sc[dob_col_sc] = pd.to_datetime(df_sc[dob_col_sc])
    df_sb[dob_col_sb] = pd.to_datetime(df_sb[dob_col_sb])

    df_sb_expanded = pd.concat([
        df_sb.assign(**{dob_col_sb: df_sb[dob_col_sb] + timedelta(days=i)})
        for i in range(-date_tolerance_days, date_tolerance_days + 1)
    ], ignore_index=True)

    # 步骤3:联合键合并(D.O.B. + 匹配姓名)
    merged = pd.merge(
        df_sc[df_sc['match_name'].notna()],
        df_sb_expanded,
        left_on=[dob_col_sc, 'match_name'],
        right_on=[dob_col_sb, name_col_sb],
        how='inner'
    )

    # 步骤4:整理输出列(去重、重命名、精简)
    result = merged[[
        'Player ID_x', 'Player_x', 'D.O.B._x', 'Competition_x', 'SC Rating',
        'SB Rating'
    ]].rename(columns={
        'Player ID_x': 'Player ID',
        'Player_x': 'Player',
        'D.O.B._x': 'D.O.B.',
        'Competition_x': 'Competition',
        'SC Rating': 'SC Rating',
        'SB Rating': 'SB Rating'
    })

    return result.reset_index(drop=True)

# 执行合并
result = fuzzy_merge_players(SC, SB)
print(result)

注意事项与优化建议

  • ✅ 阈值调优:threshold 需根据数据质量实测调整(70~85 常见);过低易误连,过高则漏匹配。
  • ✅ 性能考量:extractOne 对大数据集较慢,可预计算 SB 名字的标准化形式(如仅保留首尾名、移除中间名/后缀)提升速度。
  • ⚠️ 竞争联赛一致性:本例中 Competition 字段完全一致,若存在别名(如 "Premier League" vs "EPL"),应在匹配前统一标准化。
  • ? 结果验证:务必检查 match_score 列,人工复核低分(<80)匹配项是否合理,必要时引入第二级特征(如国籍、身高)辅助决策。

通过融合模糊文本匹配与数值容差逻辑,该方法显著提升了跨源数据整合的鲁棒性,适用于体育、医疗、金融等多领域实体对齐场景。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1791

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4684

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1749

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

27837

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3347

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3367

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1203

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Pandas 官方文档与用户指南
Pandas 官方文档与用户指南

共0课时 | 0人学习

Pandas 教程
Pandas 教程

共15课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn