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()
代码细节解释
- 引擎选择:
openpyxl支持对Excel文件进行读写修改,这是实现追加写入的核心前提,而xlwt仅支持新建文件,无法追加。 - 起始行控制:
startrow变量记录下一次写入的起始位置,确保每次新的DataFrame都接在上一次数据的后面,不会覆盖。 - 表头控制:通过
header参数,只在第一次写入时生成表头,避免重复添加表头导致数据结构混乱。 - index=False:避免将DataFrame的索引列写入Excel,减少多余的无效列。
额外注意事项
- 如果是往已有Excel文件中追加,需要在初始化
writer后添加一行writer.book = load_workbook(output_file),用来加载已有文件的内容。 - 确保你的pandas版本兼容Python2.7,推荐使用
pandas==0.25.3(最后一个支持Python2.7的正式版本)。
内容的提问来源于stack exchange,提问作者user9144862
相关产品推荐
相关产品推荐

