如何用Python判断列值是否在另一列,无匹配则追加对应行到表格
Python实现Excel两表项目匹配追加方案
前置依赖安装
首先安装处理Excel需要的第三方库,在终端执行以下命令:pip install pandas openpyxl
实现逻辑
- 读取目标Excel文件中sheet1、sheet2的全量数据
- 提取sheet2中
Projects列的所有非重复值,转为集合提升匹配效率 - 筛选sheet1里
Projects值不在上述集合中的行,即需要追加的目标行 - 以追加模式打开Excel文件,把筛选出的行写入sheet1末尾,不覆盖原有数据
完整可运行代码
import pandas as pd from openpyxl import load_workbook # -------------------------- 请修改以下配置为你自己的文件信息 -------------------------- file_path = "你的Excel文件完整路径.xlsx" # 示例:"D:/工作文档/项目统计表.xlsx" sheet1_name = "sheet1" # 如果工作表改了名称,填写实际名称即可 sheet2_name = "sheet2" target_column = "Projects" # 用于匹配的列名,确保两个表列名完全一致 # ----------------------------------------------------------------------------------- # 读取两个工作表数据 df_sheet1 = pd.read_excel(file_path, sheet_name=sheet1_name) df_sheet2 = pd.read_excel(file_path, sheet_name=sheet2_name) # 生成sheet2的项目匹配集合,自动过滤空值 sheet2_project_set = set(df_sheet2[target_column].dropna().unique()) # 筛选sheet1中未在sheet2出现的项目对应行 need_append_rows = df_sheet1[~df_sheet1[target_column].isin(sheet2_project_set)] if not need_append_rows.empty: # 追加模式打开文件,不覆盖原有内容 with pd.ExcelWriter( file_path, engine="openpyxl", mode="a", if_sheet_exists="overlay" ) as writer: # 定位到sheet1现有内容的最后一行,追加时不重复写入表头 append_start_row = writer.book[sheet1_name].max_row need_append_rows.to_excel( writer, sheet_name=sheet1_name, index=False, header=False, startrow=append_start_row ) print(f"处理完成,共追加{len(need_append_rows)}条未匹配行到sheet1") else: print("sheet1所有项目均在sheet2存在匹配项,无需追加内容")
运行注意事项
- 运行代码前请关闭正在打开的目标Excel文件,否则会触发权限报错
- 请确认两个表的
Projects列名完全一致,注意区分大小写、前后多余空格,列名不匹配会导致运行失败 - 首次运行前建议备份原Excel文件,避免误操作丢失数据
- 如果你的文件是
.xls格式,请先另存为.xlsx格式再运行,上述依赖库对新版xlsx格式兼容性最好
内容的提问来源于stack exchange,提问作者Shudan Luo
相关产品推荐
相关产品推荐

