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

如何在fuzzywuzzy模糊匹配后将dataframe的None替换为最常见姓名

模糊匹配未命中结果替换为最高频姓名解决方案

首先明确:fuzzywuzzy的process.extractOne未匹配到符合阈值的结果时会返回None,你之前写的df1.max(axis = 1)代码并不适用于当前需求,因为你需要的是用全数据集固定的最高频姓名替换所有未匹配项,而非取每行的最大值。

步骤1:计算待匹配列出现频率最高的姓名

首先统计df2中NICKNAME列的最高频值:

# 取出现频率最高的昵称,存在多个并列最高频时会返回第一个出现的
most_freq_nickname = df2['NICKNAME'].value_counts().idxmax()

步骤2:替换未匹配的None值

两种实现方式可选:

方式一:生成匹配列时直接替换(推荐,无需二次遍历)

提前预存昵称列表和最高频值,在调用apply时直接做判断:

from fuzzywuzzy import process
import pandas as pd

nickname_list = df2['NICKNAME'].tolist()
most_freq_nickname = df2['NICKNAME'].value_counts().idxmax()

df1['Matched_Nickname_and_Score'] = df1['FNAME'].apply(
    lambda x: process.extractOne(x, nickname_list, score_cutoff=75) or (most_freq_nickname, 0)
)

这里用or逻辑判断,当extractOne返回None(布尔值为False)时,会自动取后面的默认值,你可以根据需要调整默认分数0的取值。

方式二:已生成匹配列后二次替换

如果已经执行完原匹配代码得到了带None的列,直接调用fillna替换即可:

most_freq_nickname = df2['NICKNAME'].value_counts().idxmax()
df1['Matched_Nickname_and_Score'] = df1['Matched_Nickname_and_Score'].fillna(
    value=(most_freq_nickname, 0)
)

可选操作:拆分匹配结果为独立列

如果需要单独使用匹配到的昵称和分数,可以拆分存储为两列更方便后续处理:

df1[['Matched_Nickname', 'Match_Score']] = pd.DataFrame(
    df1['Matched_Nickname_and_Score'].tolist(), 
    index=df1.index
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:27:01