如何在Pandas中避免循环输出DataFrame到Excel时被覆盖
解决Pandas多DataFrame导出同一张Excel工作表被覆盖的问题
问题背景
循环生成多个列名定制化、尺寸一致的DataFrame,需要将它们导出到同一张Excel工作表中上下排列(中间留空行分隔),但现有代码执行后数据会被最后一个DataFrame覆盖。
原代码问题点
- 循环逻辑错误:
for i in len(df_list)无法正确遍历列表,应该直接遍历列表元素。 - 未指定写入起始行:
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
相关产品推荐
相关产品推荐

