如何将for循环生成的每个DataFrame保存至同一Excel文件的不同工作表?
问题原因
你每次调用PP.to_excel()时,默认会创建新的Excel文件并覆盖旧版本,所以最终仅保留最后一次循环生成的工作表。
解决方案:使用
ExcelWriter(推荐) 要在同一个文件中写入多个工作表,需要用pandas.ExcelWriter对象统一管理写入流程,它会暂存所有工作表内容,最后一次性写入文件,避免覆盖问题。
修改后的代码如下:
import numpy as np import pandas as pd # 创建ExcelWriter对象,指定输出文件路径 with pd.ExcelWriter('File.xlsx') as writer: for r in range(10): Matrix = np.empty((1000, 317)) # 保留你的矩阵填充逻辑 for i in range(1000): for j in range(317): # 这里写你的if-else填充代码 # 示例:Matrix[i][j] = i + j pass PP = pd.DataFrame(Matrix) # 将当前DataFrame写入指定工作表,关联writer对象 PP.to_excel(writer, sheet_name=f'Sheet{r+1}', header=False, index=False) # with块结束后会自动关闭writer并保存所有工作表
关键说明
with pd.ExcelWriter(...)是上下文管理器,会自动处理文件的打开与关闭,避免手动操作出错。- 每次
to_excel指定writer参数,就能将工作表追加到同一文件,而非覆盖原有内容。
备选方案:追加模式(不推荐用于大量循环)
若不想使用ExcelWriter,也可在to_excel中指定mode='a'(追加模式),但该方法每次需重新读取已有文件,效率较低,适合循环次数少或矩阵较小的场景:
import numpy as np import pandas as pd for r in range(10): Matrix = np.empty((1000, 317)) # 保留你的矩阵填充逻辑 for i in range(1000): for j in range(317): pass PP = pd.DataFrame(Matrix) # 追加模式写入,if_sheet_exists处理同名工作表(可选replace/new/error) PP.to_excel('File.xlsx', sheet_name=f'Sheet{r+1}', header=False, index=False, mode='a', if_sheet_exists='replace')
注意
mode='a'要求pandas版本≥1.4.0。if_sheet_exists参数:'replace'覆盖同名表,'new'自动重命名,'error'抛出异常。
内容的提问来源于stack exchange,提问作者suyinar
相关产品推荐
相关产品推荐

