繁体   English   中英

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

[英]multiple dataframes from pandas to one excel sheet without deleting other sheets with python

我有 2 个 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)

但我收到此错误:工作表“Sheet1”已经存在,并且 if_sheet_exists 设置为“错误”。 我尝试了 xlsxwriter 而不是 openpyxl,但这只是删除了其他工作表,显然 xlsxwriter 没有 append 模式。 我怎样才能解决这个问题?

我是xlwings的忠实粉丝,它是 anaconda 发行版的一部分。 这允许您与 EXCEL 进行交互交互,这对于查看dataframes非常方便(例如xl.view(df) )。 它还允许您将 position output 精确到您想要的位置,并且您可以根据需要格式化单元格(例如,使标题加粗和不同的颜色)。

您可以尝试这样的事情,其中文件应该引用现有的工作簿(包括文件路径)。 在这里,我假设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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM