如何使用Pandas实现Excel A字符串在Excel B全列模糊匹配并返回指定列
Excel模糊匹配合并解决方案
需求明确
- 两个Excel文件:Excel A(含Column A1、Column A2两列)、Excel B(含Column B1~Column B5五列)
- 操作目标:用Excel A中Column A2的每个值,在Excel B的所有5列中做模糊匹配(只要单元格内容包含该值即判定匹配成功)
- 输出要求:匹配成功则返回Excel B对应行的Column B4值,最终生成包含Column A1、Column A2、ColumnB4的合并结果集
示例数据
Excel A表格
| Column A1 | Column A2 |
|---|---|
| 405 | 121h |
| 496 | 156b |
| 456 | 325v |
Excel B表格
| Column B1 | Column B2 | Column B3 | Column B4 | Column B5 |
|---|---|---|---|---|
| 121h*12 | Cell 2 | Cell1 | abc | def |
| Cell 3 | 156b456 | Cell2 | efg | ijk |
期望输出表格
| Column A1 | Column A2 | ColumnB4 |
|---|---|---|
| 405 | 121h | abc |
| 496 | 156b | efg |
| 456 | 325v |
三种实现方法
方法1:Excel内置公式(适合小数据量)
在Excel A的空白列(比如C1,对应输出的ColumnB4)输入以下公式,下拉填充即可:
=XLOOKUP(TRUE,ISNUMBER(SEARCH(A2,SheetB!$A$2:$E$1000)),SheetB!$D$2:$D$1000,"",0)
- 替换说明:把
SheetB换成Excel B实际的工作表名称,$A$2:$E$1000换成Excel B的实际数据范围,$D$2:$D$1000对应Excel B的Column B4范围 - 旧版Excel(无XLOOKUP)用数组公式:
=IFERROR(INDEX(SheetB!$D:$D,MATCH(TRUE,ISNUMBER(SEARCH(A2,SheetB!$A:$E)),0)),"")
输入后按Ctrl+Shift+Enter(新版Excel可直接回车)
方法2:Power Query(适合大数据量,批量处理)
- 打开Excel,依次将Excel A和Excel B的数据导入Power Query编辑器(数据→自文件→从工作簿)
- 对导入的Excel A表(命名为TableA)添加自定义列,公式:
=Table.SelectRows(TableB, each Text.Contains([Column B1], [Column A2]) or Text.Contains([Column B2], [Column A2]) or Text.Contains([Column B3], [Column A2]) or Text.Contains([Column B4], [Column A2]) or Text.Contains([Column B5], [Column A2]))
- 展开自定义列,仅保留
Column B4列,删除多余列后调整列顺序 - 将处理后的表格加载回Excel即可
方法3:Python脚本(适合自动化或复杂场景)
使用pandas库快速处理,代码如下:
import pandas as pd # 读取Excel文件,替换为实际文件路径 df_a = pd.read_excel("ExcelA.xlsx") df_b = pd.read_excel("ExcelB.xlsx") # 定义匹配函数 def get_matched_b4(value): for _, row in df_b.iterrows(): # 检查当前行所有列是否包含目标值 if any(str(value) in str(cell) for cell in row.values): return row["Column B4"] return "" # 应用函数并生成结果 df_a["ColumnB4"] = df_a["Column A2"].apply(get_matched_b4) # 保存结果到新Excel df_a.to_excel("合并结果.xlsx", index=False)
运行前确保已安装依赖:pip install pandas openpyxl
内容的提问来源于stack exchange,提问作者Saumya Shah
相关产品推荐
相关产品推荐

