如果工作簿中不存在该工作表,则使用Pandas将工作表附加到工作簿,否则覆盖该工作表。

3

我正在使用pandas更新现有的Excel工作簿。当使用ExcelWriter对象时,如果存在一个表格,我可以覆盖它并创建一个新的表格吗?我目前的代码是附加新的表格,但是当我尝试覆盖现有的表格时,它会附加一个带有稍微变化名称的新表格(例如:如果表格“data1”存在,则运行该代码会附加一个名为“data1 1”的新表格)。

import pandas as pd
import openpyxl
path = 'test-out.xlsx'
book = openpyxl.load_workbook(path)
df1 = pd.DataFrame({'a': range(10), 'b': range(10)})
writer = pd.ExcelWriter(path, mode='a')
writer.book = book
df1.to_excel(writer, sheet_name='data1')
writer.save()


你尝试过检查工作表是否存在吗?在 to_excel 之前删除它(或清除其内容)? - David Zemens
我认为我将不得不这样做,以便处理覆盖现有表格。谢谢! - Jack Moody
1个回答

6
将表传递给writer,并使用writer.sheets = dict((ws.title, ws) for ws in book.worksheets)的代码行:
import pandas as pd
import openpyxl
path = 'test-out.xlsx'
book = openpyxl.load_workbook(path)
df1 = pd.DataFrame({'a': range(10), 'b': range(10)})
writer = pd.ExcelWriter(path, mode='a')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df1.to_excel(writer, sheet_name='data1')
writer.save()

编辑:

看起来你甚至不需要 mode='w'writer = pd.ExcelWriter(path, mode='a') 仍然可用...


请注意,pd.ExcelWriter(exl[i], engine="openpyxl", mode="a", if_sheet_exists="replace") 在任务中执行的操作是相同的。但由于某种原因,它在 Windows 环境下可以正常工作,而在 Linux 环境下却不行(我已经检查过文件权限不是原因)。在 Linux 中,它会创建新的工作表而不是覆盖现有的工作表。但是,接受的答案在 Windows 和 Linux 中都可以正常工作。 - rd10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接