使用 Pandas 将数据框附加到 Excel

2025-03-21 09:05:00
admin
原创
32
摘要:问题描述:我希望将数据框附加到 Excel此代码几乎按预期工作。虽然它不是每次都附加。我运行它,它将数据框放入 excel。但每次我运行它时它都不会附加。我还听说 openpyxl 占用大量 CPU,但没有听说过很多解决方法。import pandas from openpyxl import load_wo...

问题描述:

我希望将数据框附加到 Excel

此代码几乎按预期工作。虽然它不是每次都附加。我运行它,它将数据框放入 excel。但每次我运行它时它都不会附加。我还听说 openpyxl 占用大量 CPU,但没有听说过很多解决方法。

import pandas
from openpyxl import load_workbook

book = load_workbook('C:\\OCC.xlsx')
writer = pandas.ExcelWriter('C:\\OCC.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

df1.to_excel(writer, index = False)

writer.save()

我希望每次运行时都附加数据,但这并没有发生。

数据输出看起来像原始数据:

A   B   C
H   H   H

我想要第二次运行

A   B    C
H   H    H
H   H    H

如果这很明显,我很抱歉,因为我刚接触 Python,而且我练习的例子没有按预期发挥作用。

问题是 - 我每次运行时如何附加数据。我尝试更改为 xlsxwriter,但得到AttributeError: 'Workbook' object has no attribute 'add_format'


解决方案 1:

首先,这篇文章是解决方案的第一部分,您应该在其中指定startrow=
使用 python pandas 将新数据框附加到现有的 excel 表中

您可能还会考虑header=False。因此它应该看起来像:

df1.to_excel(writer, startrow = 2,index = False, Header = False)

如果您希望它自动到达工作表末尾并附加您的 df,那么使用:

startrow = writer.sheets['Sheet1'].max_row

如果您希望它遍历工作簿中的所有工作表:

for sheetname in writer.sheets:
    df1.to_excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)

顺便说一句:writer.sheets您可以使用字典理解(我认为它更干净,但这取决于您,它会产生相同的输出):

writer.sheets = {ws.title: ws for ws in book.worksheets}

因此完整代码如下:

import pandas
from openpyxl import load_workbook

book = load_workbook('test.xlsx')
writer = pandas.ExcelWriter('test.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

for sheetname in writer.sheets:
    df1.to_excel(writer,sheet_name=sheetname, startrow=writer.sheets[sheetname].max_row, index = False,header= False)

writer.save()

解决方案 2:

这里的所有示例都非常复杂。在文档中,它要简单得多:

def append_to_excel(fpath, df, sheet_name):
    with pd.ExcelWriter(fpath, mode="a", if_sheet_exists = 'overlay') as f:
        df.to_excel(f, sheet_name=sheet_name)

append_to_excel(<your_excel_path>, <new_df>, <new_sheet_name>)

在 LibreOffice/OpenOffice excel 文件上使用它时,我收到错误:

KeyError: "There is no item named 'xl/drawings/drawing1.xml' in the archive"

正如这里提到的,这是 openpyxl 中的一个错误。

解决方案 3:

您可以使用在此答案中定义的append_df_to_excel()辅助函数:

使用示例:

filename = r'C:OCC.xlsx'

append_df_to_excel(filename, df)

append_df_to_excel(filename, df, header=None, index=False)

append_df_to_excel(filename, df, sheet_name='Sheet2', index=False)

append_df_to_excel(filename, df, sheet_name='Sheet2', index=False, startrow=25)

解决方案 4:

我尝试读取 excel,将其放入数据框中,然后将 excel 中的数据框与所需的数据框连接起来。对我来说,这很有效。

def append_df_to_excel(df, excel_path):
    df_excel = pd.read_excel(excel_path)
    result = pd.concat([df_excel, df], ignore_index=True)
    result.to_excel(excel_path, index=False)

df = pd.DataFrame({"a":[11,22,33], "b":[55,66,77]})
append_df_to_excel(df, r"<path_to_dir><out_name>.xlsx")

解决方案 5:

如果有人需要,我发现了一个更简单的方法:

将 DF 转换为列表中的行
rows = your_df.values.tolist()
加载您的工作簿
workbook = load_workbook(filename=your_excel)
选择你的工作表
sheet = workbook[your_sheet]
迭代行以附加每一行:
for row in rows:
    sheet.append(row)
完成后保存工作簿
workbook.save(filename=your_excel)
综合起来:
rows = your_df.values.tolist()
workbook = load_workbook(filename=your_excel)
sheet = workbook[your_sheet]
for row in rows:
    sheet.append(row)
workbook.save(filename=your_excel)

解决方案 6:

def append_to_excel(fpath, df):
 if (os.path.exists(fpath)):
    x=pd.read_excel(fpath)
 else :
    x=pd.DataFrame()

 dfNew=pd.concat([df,x])
 dfNew.to_excel(fpath,index=False)

解决方案 7:

为什么要把事情复杂化?只需获取 excel 文件中的行数,即可使用 startrow 参数确定附加到何处:

import pandas as pd
import openpyxl as xl

# Get number of rows in excel file (to determine where to append)
source_file = xl.load_workbook("file.xlsx", enumerate)
sheet = source_file["sheetname"]
row_count = sheet.max_row
source_file.close()

with pd.ExcelWriter("file.xlsx", mode='a', if_sheet_exists='overlay') as writer:  
    data.to_excel(writer, sheet_name='sheetname', index= False, startrow = row_count)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用