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

如何实现循环将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:55:18