从pandas到一个excel表的多个数据帧,而不使用python删除其他表



我有两个dfs,我想将其导出到已经有三张表的现有excel文件中。这两个dfs应该在表"中;Sheet1";(一张新纸(

df = pd.read_excel("Data Set Finished.xlsx", sheet_name="Details")
df2 = df.sum(axis=1)
writer = pd.ExcelWriter('Data Set Finished.xlsx', engine='openpyxl', mode ="a")


df.to_excel(writer, sheet_name='Sheet1', index=False) 
df2.to_excel(writer, sheet_name='Sheet1', startrow= 1,startcol=12, index=False, header=False)

但是我得到了这个错误:Sheet 'Sheet1' already exists and if_sheet_exists is set to 'error'.我尝试了xlsxwriter而不是openpyxl,但这只是删除了其他工作表,而且显然xlsxwriter没有附加模式。我该怎么解决这个问题?

我非常喜欢xlwings,它是anaconda分布的一部分。这使您可以与EXCEL交互,这对于查看dataframes(例如xl.view(df)(非常方便。它还允许您将输出准确地定位在您想要的位置,并且您可以根据需要格式化单元格(例如,将标题加粗并使用不同的颜色(。

您可以尝试这样的操作,其中文件应该引用现有工作簿(包括文件路径(。在这里,我假设Sheet1已经存在于excel工作簿中。如果不是这样,则通过wb.sheets.add()添加一张图纸。

import numpy as np
import pandas as pd
import xlwings as xl
df1 = pd.DataFrame({
'date':pd.date_range(start='1/1/1990', periods=10, freq='Q'),
'a': np.random.choice(range(100),10),
'b': np.random.choice(range(100),10),
})
df2 = pd.DataFrame({
'date':pd.date_range(start='1/1/2000', periods=10, freq='Q'),
'c': np.random.choice(range(100),10),
'd': np.random.choice(range(100),10),
})
df3 = pd.DataFrame({
'date':pd.date_range(start='1/1/2010', periods=10, freq='Q'),
'e': np.random.choice(range(100),10),
'f': np.random.choice(range(100),10),
})

file = 'C:/Users/BRB/Book1.xlsx'
wb = xl.Book(file)
ws = wb.sheets('Sheet1')
ws.range('A1').value = df1
ws.range('E1').value = df2
ws.range('A14').value = df3
wb.save()
wb.close()

如果你想抑制索引,只需包括选项options(index=False),如下所示:

ws.range('A1').options(index=False).value = df1
ws.range('E1').options(index=False).value = df2
ws.range('A14').options(index=False).value = df3

最新更新