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

使用Python Pandas get_close_matches无法关联查找表完整匹配数据的问题

问题分析与解决方案

你遇到的核心问题是get_close_matches仅返回匹配字符串而非索引,再加上原代码存在拼写错误、行对象复用、索引逻辑混乱等问题,导致无法正确关联所有匹配项的查找表数据。

原代码的关键错误

  • 缺少模块导入:get_close_matches属于difflib模块,必须先导入才能调用。
  • 列名拼写错误:查找表列名为Key(大写K),但代码中写成lookupRow['key'](小写k),导致匹配信息无法正确赋值。
  • 行对象复用与索引覆盖:循环中始终修改同一个row对象,并用浮点数索引覆盖写入结果表,最终只会保留最后一次匹配内容,且索引逻辑混乱。

修正后的代码

import pandas as pd
from difflib import get_close_matches

lookup_df = pd.DataFrame({'Key': ['rot', 'gelb', 'rote'],
                         'Name1': ['Peter', 'Hans', 'Gustav'],
                         'Name2': ['Pan', 'Wurst', 'Kraut']})
search_df = pd.DataFrame({'Key': ['rot', 'blau', 'gelb']})

# 初始化结果列表,存储每个匹配项的完整行数据
results = []

for _, search_row in search_df.iterrows():
    search_key = search_row['Key']
    # 获取所有符合相似度要求的匹配Key
    matched_keys = get_close_matches(search_key, lookup_df['Key'], n=10, cutoff=0.8)
    
    # 为每个匹配项生成独立的结果行
    for matched_key in matched_keys:
        # 定位查找表中对应的行(假设Key唯一,用iloc[0]取第一行)
        lookup_row = lookup_df[lookup_df['Key'] == matched_key].iloc[0]
        # 复制搜索行并添加匹配信息
        result_row = search_row.copy()
        result_row['Matched Key'] = matched_key
        result_row['Matched Name 1'] = lookup_row['Name1']
        result_row['Matched Name 2'] = lookup_row['Name2']
        # 将结果行加入列表
        results.append(result_row)

# 将结果列表转换为DataFrame
resultDF = pd.DataFrame(results)
print(resultDF)

代码说明

  1. 正确导入模块:添加from difflib import get_close_matches确保函数可用。
  2. 独立结果行:为每个匹配项复制新的行对象,避免内容被覆盖。
  3. 准确关联数据:通过lookup_df['Key'] == matched_key定位对应行,用正确列名提取数据。
  4. 清晰结果结构:最终resultDF会为每个匹配项生成一行,比如搜索rot时,会同时输出rot和rote对应的两组名称数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:29