无法将枢轴 table 写入 excel 文件

Trouble writing pivot table to excel file

我正在使用 pandas/openpyxl 处理一个 excel 文件,然后创建一个数据透视表 table 以添加到当前工作簿中的新工作 sheet。当我执行我的代码时,新的 sheet 被创建但枢轴 table 没有被添加到 sheet.

这是我的代码:

worksheet2 = workbook.create_sheet()
worksheet2.title = 'Sheet1'
workbook.save(filename)

excel = pd.ExcelFile(filename)
df = excel.parse(sheetname=0)
df1 = df[['Product Description', 'Supervisor']]

table1 = pd.pivot_table(df1, index = ['Supervisor'],
                           columns = ['Product Description'],
                          values = ['Product Description'],
                           aggfunc = [lambda x: len(x)], fill_value = 0)



print table1

writer = pd.ExcelWriter(filename)
table1.to_excel(writer, 'Sheet1')
writer.save()
workbook.save(filename)

当我打印出 table 时,我得到了这个:

                               <lambda>                         \
Product Description EXPRESS 10:30 (doc) EXPRESS 10:30 (nondoc)   
Supervisor                                                       
Building                              0                      1   
Gordon                                1                      0   
Pete                                  0                      0   
Vinny A                               0                      1   
Vinny P                               0                      1   

                                                                \
Product Description EXPRESS 12:00 (doc) EXPRESS 12:00 (nondoc)   
Supervisor                                                       
Building                              0                      4   
Gordon                                1                      2   
Pete                                  1                      0   
Vinny A                               1                      1   
Vinny P                               0                      1   


Product Description MEDICAL EXPRESS (nondoc)  
Supervisor                                    
Building                                   0  
Gordon                                     1  
Pete                                       0  
Vinny A                                    0  
Vinny P                                    0  

我希望枢轴 table 看起来像这样:(如果我的枢轴 table 代码不能让它看起来像这样有人可以帮我让它看起来像这样吗?我'我不确定如何添加总计列。它与数据透视表的 aggfunc 部分有关 table 对吗?)

您不能这样做,因为 openpyxl 目前不支持数据透视表。有关详细信息,请参阅 https://bitbucket.org/openpyxl/openpyxl/issues/295

因为pd.pivot_tablereturns一个dataframe,你可以直接把dataframe写入excel。 以下是我如何将 pandas 数据框的输出写入 excel 模板。 请注意,如果数据已经存在于您尝试写入数据帧的单元格中,它不会被覆盖并且数据帧将被写入新的 sheet 这是我的我已经包含了一个步骤来清除现有的来自模板的数据。我没有尝试在合并的单元格上写入输出,这样可能会引发错误。

设置

from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
file_path='Template.xlsx'
book=load_workbook(file_path)
writer = pd.ExcelWriter(file_path, engine='openpyxl')
writer.book = book
sheet_name="Template 1"
sheet=book[sheet_name]

在要粘贴输出的excel 模板中设置第一行和第一列。 如果我的输出要从单元格 N2 开始粘贴,row_start 将为 2,col_start 将为 14

row_start=2
col_start=14

清除 excel 模板中的现有数据

for c_idx, col in enumerate(df.columns,col_start):
    for r_idx in range(row_start,10001):
        sheet.cell(row=r_idx, column=c_idx, value="")

将数据帧写入 excel 模板

rows=dataframe_to_rows(df,index=False)
for r_idx, row in enumerate(rows,row_start):
    for c_idx, col in enumerate(row,col_start):
        sheet.cell(row=r_idx, column=c_idx, value=col)

writer.save()
writer.close()