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

Power BI的Power Query Editor内置模糊匹配失效,如何用Python合并表?

解决Power Query模糊匹配错误,实现精准表关联的方案

一、Power Query内的简便优化方案

针对内置模糊匹配适配单词语句的局限性,不用额外工具的话,可以通过自定义匹配规则或手动实现精准相似度算法来解决:

1. 提取核心匹配字段

先从两个表的Name字段中提取核心标识(比如品牌前缀+型号),再基于提取后的字段做精确或模糊匹配:

  • 比如针对Apple Fruit A11,用正则表达式提取Apple A11;针对Apple A11R/T,同样提取Apple A11,这样就能让同品牌同型号的条目匹配。
  • Power Query中可以用Text.RegularExpressions.Match实现提取,示例M函数:
let
    ExtractCore = (inputText as text) as text =>
    let
        // 匹配品牌(大写开头字母)+ 型号(字母+数字+特殊字符)
        regexMatch = Text.RegularExpressions.Match(inputText, "([A-Z][a-z]+)\s+.*?([A-Z0-9\/]+)"),
        coreText = regexMatch.Groups(1).Value & " " & regexMatch.Groups(2).Value
    in
        coreText
in
    ExtractCore

给Table1和Table2都添加提取后的核心字段,再用这个字段做精确匹配即可。

2. 自定义编辑距离(Levenshtein)匹配

如果需要保留原字段匹配,可手动实现编辑距离算法,筛选最相似的条目:

  • 写一个计算两个字符串编辑距离的M函数,然后对Table1的每个Name,遍历Table2计算距离,取距离最小的匹配项(同时可设置距离阈值过滤无效匹配)。

二、Python基于字符串相似度的实现方法

用pandas结合rapidfuzz(比fuzzywuzzy更快)可以灵活控制匹配逻辑,精准解决这类问题:

实现步骤与代码

import pandas as pd
from rapidfuzz import process, fuzz

# 读取两个表(根据实际数据源调整,比如csv/excel)
table1 = pd.read_excel("table1.xlsx")
table2 = pd.read_excel("table2.xlsx")

# 定义匹配函数:返回匹配到的Table2的Name和Value
def match_table2_info(name):
    # 使用token_set_ratio算法:忽略单词顺序、重复,聚焦核心词匹配
    # 适合处理带额外描述的名称(比如"Apple Fruit A11"和"Apple A11R/T")
    best_match = process.extractOne(name, table2["Name"], scorer=fuzz.token_set_ratio)
    match_name, score, _ = best_match
    # 设置相似度阈值(可根据需求调整,比如80分以上视为有效匹配)
    if score >= 80:
        matched_value = table2.loc[table2["Name"] == match_name, "Value"].iloc[0]
        return (match_name, matched_value)
    else:
        return (None, None)

# 给Table1添加匹配结果
table1[["Matched_Table2_Name", "Matched_Value"]] = table1["Name"].apply(
    lambda x: pd.Series(match_table2_info(x))
)

# 输出或保存结果
print(table1)
# table1.to_excel("matched_result.xlsx", index=False)

关键说明

  • token_set_ratio算法会把字符串拆分为单词集合,对比集合的交集与并集比例,能有效忽略Fruit这类冗余描述,让Apple Fruit A11与Apple A11R/T的相似度远高于和Berry A11的相似度,避免错误匹配。
  • 可根据实际数据调整相似度阈值(比如从70到90),平衡匹配准确率和召回率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:16:17