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

Python2.7.14如何在同一张Excel表追加多个DataFrame而不覆盖数据

解决Python 2.7.14中追加多个DataFrame到同一张Excel工作表的问题

当然可以实现!你当前的代码每次循环都会创建新的工作表,要改成追加到同一张表,只需要调整写入逻辑,定位每个DataFrame的写入起始行即可。下面是具体的实现方案:

关键思路

  • 使用支持读写已有Excel文件的引擎(比如openpyxl),因为默认的xlwt不支持追加操作
  • 控制表头只写入一次,后续追加的DataFrame只写入数据
  • 动态计算每次写入的起始行,避免覆盖原有数据

步骤与修改后的代码

首先确保你已经安装了兼容Python2.7的openpyxl版本:

pip install openpyxl==2.6.4

然后修改你的代码如下:

import pandas as pd
from openpyxl import load_workbook

# 定义输出文件路径,初始化ExcelWriter并指定openpyxl引擎
output_file = "your_output_file.xlsx"
writer = pd.ExcelWriter(output_file, engine='openpyxl')

# 初始化起始行:第一次写入从第0行开始(包含表头)
startrow = 0

for itr in range(0,3):
    df["users"] = UserArray
    for action in range(len(ColumnName)):
        Array = []
        for user in range(int(usercount)):
            # 调用Copylogs函数获取数据
            Array.append(CopyLogs(abs_read_path,itr+1,user+1,ColumnName[action]))
        Array1 = AverageStatistics(Array)
        df[ColumnName[action]] = Array1
    
    print df
    print "\n"
    
    # 控制表头写入:第一次写入带表头,后续仅写入数据
    if startrow == 0:
        df.to_excel(writer, sheet_name="TimeStamps", startrow=startrow, index=False)
    else:
        df.to_excel(writer, sheet_name="TimeStamps", startrow=startrow, index=False, header=False)
    
    # 更新起始行:加上当前DataFrame的行数,可选+1来留空行分隔不同循环的数据
    startrow += len(df) + 1  # 不需要空行的话,改成startrow += len(df)

# 保存并关闭文件
writer.save()

代码细节解释

  1. 引擎选择:openpyxl支持对Excel文件进行读写修改,这是实现追加写入的核心前提,而xlwt仅支持新建文件,无法追加。
  2. 起始行控制:startrow变量记录下一次写入的起始位置,确保每次新的DataFrame都接在上一次数据的后面,不会覆盖。
  3. 表头控制:通过header参数,只在第一次写入时生成表头,避免重复添加表头导致数据结构混乱。
  4. index=False:避免将DataFrame的索引列写入Excel,减少多余的无效列。

额外注意事项

  • 如果是往已有Excel文件中追加,需要在初始化writer后添加一行writer.book = load_workbook(output_file),用来加载已有文件的内容。
  • 确保你的pandas版本兼容Python2.7,推荐使用pandas==0.25.3(最后一个支持Python2.7的正式版本)。

内容的提问来源于stack exchange,提问作者user9144862

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:49