首页 > 后端开发 > Python教程 > 如何将 Pandas DataFrame 附加到现有 Excel 工作表而不覆盖数据?

如何将 Pandas DataFrame 附加到现有 Excel 工作表而不覆盖数据?

Barbara Streisand
发布: 2024-12-03 15:02:11
原创
418 人浏览过

How to Append a Pandas DataFrame to an Existing Excel Sheet Without Overwriting Data?

使用 Python Pandas 将新数据框附加到现有 Excel 工作表

挑战:

将新数据框附加到数据框的末尾现有的 Excel 工作表而不覆盖现有的data.

解决方案:

在 Pandas 版本 1.4.0 之前,追加到现有 Excel 工作表需要手动将新数据的索引与现有工作表匹配并将其保存回来。

改进的熊猫解决方案>= 1.4.0:

Pandas 1.4.0 及更高版本在 ExcelWriter 函数中包含“覆盖”选项,允许附加到现有工作表而不覆盖现有内容。

appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'), sheet_name='Sheet1', mode='a', if_sheet_exists='overlay')
登录后复制

熊猫的替代解决方案 1.4.0:

def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None, **to_excel_kwargs):
    """
    Append a DataFrame [df] to existing Excel file [filename]
    into [sheet_name] Sheet.
    If [filename] doesn't exist, then this function will create it.
    """
    writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a')
    if sheet_name in writer.book.sheetnames:
        # try to open an existing workbook
        writer.book = load_workbook(filename)
        # truncate sheet
        if startrow is None and sheet_name in writer.book.sheetnames:
            startrow = writer.book[sheet_name].max_row
        # index of [sheet_name] sheet
        idx = writer.book.sheetnames.index(sheet_name)
        # remove [sheet_name]
        writer.book.remove(writer.book.worksheets[idx])
        # create an empty sheet [sheet_name] using old index
        writer.book.create_sheet(sheet_name, idx)
        # copy existing sheets
        writer.sheets = {ws.title: ws for ws in writer.book.worksheets}
    else:
        # file doesn't exist, we are creating a new one
        startrow = 0
    # write out the DataFrame to an ExcelWriter
    df.to_excel(writer, sheet_name=sheet_name, **to_excel_kwargs)
    writer.close()
    writer.save()

appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'), sheet_name='Sheet1', mode='a', if_sheet_exists='overlay')
登录后复制

示例:

import pandas as pd

# Existing data
existing_df = pd.DataFrame({
    'Name': ['John', 'Mary', 'Bob'],
    'Age': [20, 25, 30]
})

# New data to append
new_df = pd.DataFrame({
    'Name': ['Alice', 'Tom'],
    'Age': [35, 40]
})

append_df_to_excel('master_data.xlsx', new_df, sheet_name='Sheet1', startrow=existing_df.shape[0] + 1)
登录后复制

其他注意事项:

  • 您可以使用startrow指定追加的起始行参数。
  • 您可以将其他关键字参数传递给 to_excel_kwargs 字典中的 to_excel() 方法。
  • 此解决方案应该适用于所有版本的 Pandas,无论使用什么 Excel 引擎(例如、xlrd、openpyxl)。

以上是如何将 Pandas DataFrame 附加到现有 Excel 工作表而不覆盖数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板