【问题标题】:Write data from a df to an excel workbook that already has other worksheets将数据从 df 写入已经有其他工作表的 excel 工作簿
【发布时间】:2016-06-22 21:06:35
【问题描述】:

我想将数据从数据框中写入 Excel 工作簿。工作簿具有包含现有数据的其他工作表。我想将数据框中的数据写入新的工作表

当我使用时

df.to_excel('name.xlsx', 'Sheet3')

其他列表(工作表)中的数据被删除。如何将数据写入现有工作簿中的另一个工作表而不丢失现有数据?

【问题讨论】:

标签: python excel pandas


【解决方案1】:

您可以使用下面的add_xlsx_sheet 函数,其中包括一些可用于to_excel 的设置,并检查(并删除)具有所需名称的sheet 是否已存在于给定的workbook 中:

from openpyxl import load_workbook
import pandas as pd

def add_xlsx_sheet(df, sheet_name='sheet', index=True, digits=2, path=None):
    """Save pd.DataFrame to new excel worksheet in existing .xlsx workbook

    :param df: pd.DataFrame
    :param sheet_name:
    :param index: bool
    :param digits: int number of digits for float formatting
    :param path: path to existing workbook of type .xlsx
    """
    book = load_workbook(path)
    writer = pd.ExcelWriter(path, engine='openpyxl')
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    df.to_excel(excel_writer=writer, sheet_name=sheet_name, startrow=1, startcol=1,
                float_format='%.{}f'.format(digits), index=index)
    writer.save()

.groupby() 的用法是:

df.groupby('col_name').apply(lambda x: add_xlsx_sheet(x, x.name, path='{}.xlsx'.format(x.name))) 

【讨论】:

  • 如果我需要同时写入多个文件?如果 df 我有名字,我尝试df.groupby('mail').apply(lambda g: g.to_excel(str(g.name) + '.xlsx', 'Full about smartphones'))
  • 当我使用它时,该文件中存在的数据将被删除。即使我使用另一个sheetname
  • 查看更新后的.groupby() 用例说明。
  • 我怎样才能指定很多文件呢path?
  • 如果您打算将相同的DataFrame写入多个现有文件,则需要对所有文件重复函数内部的步骤。您可以扩展该函数,使其采用多个路径并在函数内部的路径上循环,或者重复调用 groupby 并在那里提供不同的路径。不过,看起来这与您最初提出的问题有点不同。
猜你喜欢
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2018-02-16
相关资源
最近更新 更多