如何实现循环将DataFrame数据追加至Excel并跳过已存在记录?
实现DataFrame数据去重追加至Excel工作表
问题背景
我有一个包含alias和fullname两列的DataFrame,目前能将数据追加到Excel的Sheet1中,但无法跳过已存在的alias值——重复运行代码时会重复写入已有行,希望只追加工作表中不存在的新数据。
当前仅能实现追加的代码(无去重逻辑):
import pandas as pd from openpyxl import load_workbook from openpyxl.utils.dataframe import dataframe_to_rows df1 = pd.DataFrame(columns=['alias','fullname']) # 原代码缺失右括号,已补充 excelpath = 'contact.xlsx' A = load_workbook(excelpath) B = A['Sheet1'] for r in dataframe_to_rows(df1, index = False): B.append(r) A.save(excelpath)
解决方案
核心逻辑
先提取Excel中已有的alias值,筛选出DataFrame中未存在的行,再将这些新行追加到工作表中。
完整可运行代码
import pandas as pd from openpyxl import load_workbook from openpyxl.utils.dataframe import dataframe_to_rows # 替换为你的实际DataFrame数据 df1 = pd.DataFrame([ {'alias': 'xyz', 'fullname': 'abc'}, {'alias': 'new_user', 'fullname': 'New Fullname'} ]) excelpath = 'contact.xlsx' # 加载目标工作簿和工作表 wb = load_workbook(excelpath) ws = wb['Sheet1'] # 读取工作表中已有的alias值(跳过表头,从第2行开始) existing_aliases = [] for row in ws.iter_rows(min_row=2, max_col=1, values_only=True): if row[0] is not None: existing_aliases.append(row[0]) # 筛选出DataFrame中未存在的新数据行 new_data = df1[~df1['alias'].isin(existing_aliases)] # 将新数据追加到工作表(header=False避免重复写入表头) for r in dataframe_to_rows(new_data, index=False, header=False): ws.append(r) # 保存修改后的工作簿 wb.save(excelpath)
关键说明
- 通过
iter_rows读取Excel中已有的alias列数据,跳过表头行(假设表头在第1行) - 利用
isin和取反运算符~快速筛选出DataFrame中的新数据 - 追加时设置
header=False,防止重复写入表头 - 修复了原代码中
pd.DataFrame定义时缺失的右括号问题
内容的提问来源于stack exchange,提问作者npal34
相关产品推荐
相关产品推荐

