【问题标题】:How to append a dataframe to an excel template?如何将数据框附加到 Excel 模板?
【发布时间】:2018-07-12 07:46:24
【问题描述】:

我有一个带有一些标题和其他信息的xlsx 模板,我想要的只是用数据框填充该表而不丢失模板的内容。这是我使用的代码:

 writer = pd.ExcelWriter('xls/template.xlsx', engine='openpyxl')
 df.to_excel(writer, index=False, sheet_name='Sheet1',startrow=2,header=None)
 writer.save()

我在某处读到,要使用模板,我必须在编写器中使用 openpyxl 引擎,但即便如此,模板的内容也会丢失,并且数据帧是在 2 行之后写入的。上面的行之前有一些标题,但现在它们是空白的。

【问题讨论】:

  • 我遇到了类似的问题,最后我放弃了。
  • @CharlieClark 使用循环并且使用这种方法我已经成功地做到了这一点,但现在有很多数据和附加需要很多时间。因为,df.to_csv()df.to_excel() 让它更快我想使用它,但问题是,它不允许我将数据附加到模板。
  • All 将数据帧转换为某种行的方法使用循环,但循环并不慢。将数据从 Python 转换为 XML 需要时间。

标签: python python-3.x pandas dataframe openpyxl


【解决方案1】:

只需使用 openpyxl 加载工作表并将数据框写入其中。

import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows

wb= openpyxl.load_workbook('H:/your/dir/template.xlsx')
ws = wb.get_sheet_by_name('xyz')
rows = dataframe_to_rows(df)

for r_idx, row in enumerate(rows, 3):  #starts at 3 as you want to skip the first 2 rows
    for c_idx, value in enumerate(row, 1):
         ws.cell(row=r_idx, column=c_idx, value=value)

【讨论】:

  • 这是我正在做的,但我想要的是附加整个数据帧而不循环每一行,即df.to_excel
  • @FaizanAli to_excel 只是抽象循环
【解决方案2】:

一个例子可以是:

test_df = pd.read_excel('xls/template.xlsx', sheet_name='Sheet1')
test_df = test_df.append(df, ignore_index=True)
writer = pd.ExcelWriter('xls/template.xlsx', engine='openpyxl')
test_df.to_excel(writer, sheet_name='Sheet1')

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 2020-10-13
    • 2018-05-24
    • 2022-01-20
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多