如何用Python匹配两个Excel表格的两列并找出指定数据差异?
用Pandas对比两个Excel中指定列组合的差异
你需要从Example1.xlsx里筛选Col1="A"的行,再找出其中Col2值在Example2.xlsx的Col1="A"行中不存在的记录。之前尝试拼接列值对比报错,原因是字符串和数字类型的列不能直接用+拼接,且两个数组的长度可能不一致,直接对比维度不匹配。
下面提供两种可行的解决方案:
方法一:利用集合快速匹配(高效简洁)
这种方法适合只需要快速筛选结果的场景:
import pandas as pd # 读取两个Excel文件 df1 = pd.read_excel("Example1.xlsx") df2 = pd.read_excel("Example2.xlsx") # 分别筛选出Col1等于"A"的子数据集 df1_filtered = df1[df1["Col1"] == "A"] df2_filtered = df2[df2["Col1"] == "A"] # 把Example2中符合条件的Col2值转成集合,集合查找效率更高 valid_col2_values = set(df2_filtered["Col2"].tolist()) # 从Example1的筛选结果中,找出Col2不在合法集合里的行 result = df1_filtered[~df1_filtered["Col2"].isin(valid_col2_values)] print(result)
运行后会输出预期结果:
Col1 Col2 Col3 Col4 2 A 9 def uvw
方法二:用Merge左连接匹配(适合复杂关联场景)
如果需要保留更多关联比对的信息,可以用Pandas的左连接功能:
import pandas as pd df1 = pd.read_excel("Example1.xlsx") df2 = pd.read_excel("Example2.xlsx") # 筛选Col1="A"的行 df1_a = df1[df1["Col1"] == "A"] df2_a = df2[df2["Col1"] == "A"] # 只保留df2中用于匹配的Col1和Col2列 match_cols = df2_a[["Col1", "Col2"]] # 以Col1和Col2为匹配键,做左连接 merged_df = df1_a.merge(match_cols, on=["Col1", "Col2"], how="left", indicator=True) # 筛选出只在Example1中存在的行 result = merged_df[merged_df["_merge"] == "left_only"].drop(columns="_merge") print(result)
执行后同样会得到目标结果。
内容的提问来源于stack exchange,提问作者Bobolat
相关产品推荐
相关产品推荐

