如何用Python自动按文件号将多组DataFrame存入Excel?
问题
我有一个包含5个唯一文件号的DataFrame,针对每个文件号会生成两个不同的DataFrame(例如文件号55对应df1、df2,文件号56对应另一组df1、df2等)。我希望将结果存入单个Excel文件,每个文件号对应一个以该文件号命名的工作表,每个工作表中存放对应文件号的两个DataFrame,且无需手动指定文件号,需从df['File Number'].unique()中获取。我尝试了以下代码:
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter') workbook=writer.book worksheet=workbook.add_worksheet('55') writer.sheets['55'] = worksheet df1.to_excel(writer,sheet_name='55',startrow=0 , startcol=0) df2.to_excel(writer,sheet_name='55',startrow=15, startcol=0) writer.save()
但这里需要手动指定文件号55,请问如何实现自动化生成包含所有文件号对应结果的Excel工作表?
解决方案
通过循环遍历所有唯一文件号,结合自动生成对应DataFrame的逻辑,就能实现无需手动指定文件号的批量写入。
示例代码
import pandas as pd # 从原始DataFrame中获取所有唯一文件号 file_numbers = df['File Number'].unique() # 使用with语句管理Excel写入器,自动处理文件保存与资源释放 with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer: # 遍历每个文件号 for file_num in file_numbers: # ---------- 替换为你的业务逻辑 ---------- # 根据当前文件号生成对应的两个DataFrame # 示例:假设你有一个函数专门生成这两个DataFrame # df1, df2 = get_dfs_by_file_number(file_num) df1 = ... # 生成当前文件号对应的第一个DataFrame df2 = ... # 生成当前文件号对应的第二个DataFrame # -------------------------------------- # 将文件号转为字符串作为工作表名称(Excel要求表名为字符串) sheet_name = str(file_num) # 写入第一个DataFrame,从第0行开始 df1.to_excel(writer, sheet_name=sheet_name, startrow=0, startcol=0, index=False) # 写入第二个DataFrame,从第15行开始(可根据实际行数调整间距) df2.to_excel(writer, sheet_name=sheet_name, startrow=15, startcol=0, index=False)
关键说明
- 无需手动创建工作表:
to_excel会自动创建指定名称的工作表,无需额外调用add_worksheet - 使用
with语句:替代手动调用writer.save(),避免资源泄漏 - 动态工作表名称:通过
str(file_num)将文件号转为合法的工作表名称 - 灵活调整位置:修改
startrow参数可以调整两个DataFrame的间距,比如如果df1有N行,可设startrow=N+2来留空行分隔
内容的提问来源于stack exchange,提问作者Chinmay
相关产品推荐
相关产品推荐

