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

如何在Pandas中避免循环输出DataFrame到Excel时被覆盖

解决Pandas多DataFrame导出同一张Excel工作表被覆盖的问题

问题背景

循环生成多个列名定制化、尺寸一致的DataFrame,需要将它们导出到同一张Excel工作表中上下排列(中间留空行分隔),但现有代码执行后数据会被最后一个DataFrame覆盖。

原代码问题点

  1. 循环逻辑错误:for i in len(df_list) 无法正确遍历列表,应该直接遍历列表元素。
  2. 未指定写入起始行:to_excel 默认从第0行开始写入,导致每次写入都会覆盖之前的数据。

修正后的代码

import pandas as pd

# 模拟生成示例数据
data = [[2,4,2,4,2], [4,8,4,8,4], [6,12,6,12,6], [8,16,8,16,8], [10,20,10,20,10]]
df4 = pd.DataFrame(data, columns=['Car', 'Amount', 'ColorCode', 'TireSize', 'AreaCode'])

df = df4.copy()
df2 = df4.copy()
df2.columns = ['Truck', 'Amount', 'ColorCode', 'TireSize', 'AreaCode']

truck = df2.copy()
car = df.copy()

df_list = [car, truck]

opf = 'CarComparison.xlsx'
with pd.ExcelWriter(opf) as writer:
    startrow = 0
    for df in df_list:
        # 指定起始行写入DataFrame
        df.to_excel(writer, sheet_name='CarComparison', index=False, startrow=startrow)
        # 更新起始行:当前DataFrame总行数(数据+表头) + 1行空行
        startrow += df.shape[0] + 2

关键说明

  • 使用startrow参数控制每个DataFrame的写入起始位置,避免覆盖。
  • 每次写入后更新startrow:df.shape[0]是数据行数,加1是表头行,再加1是预留的空行,确保多个DataFrame之间有清晰分隔。
  • 直接遍历df_list中的DataFrame,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:50:32