Python 将数据帧写入 excel - 检查选项卡是否存在并覆盖,否则创建

Python writing dataframe to excel - Check if tab exists and overwrite otherwise create

以下代码在第一次创建选项卡 x1 和 x2 并填充数据时工作正常。当为新数据再次执行时,它不会检查选项卡是否已经存在并添加新的错误选项卡 x11 和 x21。

import pandas as pd
import numpy as np
from openpyxl import load_workbook
import os

filename = os.path.dirname(os.path.abspath(__file__))+ '\Test_excel.xlsx' # path to current directory adding file name

book = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl')
writer.book = book

x1 = np.random.randn(10, 4)
df1 = pd.DataFrame(x1)

x2 = np.random.randn(20, 2)
df2 = pd.DataFrame(x2)

df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()

如果选项卡已经存在,我需要它来覆盖现有的选项卡数据,否则创建选项卡。有什么想法吗?

您提出的问题我也即将 运行 在我自己的项目中解决。一种解决方案是查找 sheet 并使用异常 read_excel() 引发。如果没有异常,那么 sheet 存在,所以删除它。这是我刚刚在 Jupiter 上试过的代码:

from xlrd import XLRDError

try:
    df = pd.read_excel( writer, sheet_name='x1')
except XLRDError: 
    print ("No sheet x1 found")
else:
    print ("Removing sheet")
    del book['x1']

找出 sheet 是否存在于 Excel 文件中的最快方法可能是使用 openpyxl 的只读模式。

from openpyxl import load_workbook
wb = load_workbook("file.xlsx", read_only=True)
'x1' in wb.sheetnames

为了完全控制数据框的使用,openpyxl 还提供了一些实用程序,可让您准确地在您想要的位置放置和格式化数据框。