python - 每个工作表多个数据框,每个工作簿多个工作表
问题描述
我编写了一个函数,以便我可以将多个数据框写入一个 Excel 工作表,然后在一个 Excel 工作簿中有多个工作表。我能够实现第一部分,但不是第二部分。当脚本运行时,它会覆盖现有选项卡并用新选项卡覆盖它,这意味着每次我打开输出文件时,它只有一张,即最新的一张。
我一直对 writer.save() 函数以及何时使用它(即:in 或 our of a loop)感到有些困惑。有什么建议么?
def dfs_to_sheet(dflist, bookname, sheetname, startrow = 0):
writer = pd.ExcelWriter('{}.xlsx'.format(bookname), engine='openpyxl')
numdfs = 0
startrow = 0
for i in dflist:
if numdfs == 0:
i.to_excel(writer, sheet_name=sheetname, startrow = startrow)
elif numdfs != 0:
i.to_excel(writer, sheet_name = sheetname, startrow = startrow)
startrow = startrow + len(i) + 2
numdfs += 1
writer.save()
解决方案
您正在寻找的答案与此处的解决方案有关,但由于您想在多次迭代中调用它,所以它有点复杂。我的解决方案如下,但请记住,如果有重复的工作表,这会变得混乱(例如,如果 Sheet1 存在,并且您尝试再次添加 Sheet1,它就会变成 Sheet11)。
import pandas as pd
import os.path
from openpyxl import load_workbook
def dfs_to_sheet(dflist, bookname, sheetname, startrow = 0):
book_file = '{}.xlsx'.format(bookname)
writer = pd.ExcelWriter(book_file, engine='openpyxl')
if os.path.isfile(book_file):
writer.book = load_workbook(book_file)
numdfs = 0
startrow = 0
for i in dflist:
if numdfs == 0:
i.to_excel(writer, sheet_name = sheetname, startrow = startrow)
elif numdfs != 0:
i.to_excel(writer, sheet_name = sheetname, startrow = startrow)
startrow = startrow + len(i) + 2
numdfs += 1
writer.save()
writer.close()
推荐阅读
- python-3.x - 在底图python中绘制点
- javascript - Firebase Cloud FireStore:插入大型数组
- python - 使用 lower 函数将 pyspark 数据框中单列中的值转换为文本清理中的小写
- javascript - 连接到 MongoDB 时未处理的承诺拒绝
- java - Jacoco - 从覆盖率报告中排除包裹
- reactjs - 模态酶安装单元测试:未定义 MutationObserver
- r - 将面板数据从长到长,但扩展变量
- java - InfluxDB 的请求 选择时间 > 时间戳
- python - Bash 脚本手动执行 Python,但不是从 cron
- ruby - 无法解析加密文本的 JSON