【问题标题】:How to save a pandas pivot table with xlsxwriter in excel如何在 Excel 中使用 xlsxwriter 保存熊猫数据透视表
【发布时间】:2020-03-18 12:52:40
【问题描述】:

我想将 Pandas 数据透视表以探测方式保存到 Excel 工作簿中。

我有一个基于这个公式的 pandas 数据透视表:

table = pd.pivot_table(d2, values=['Wert'], index=['area', 'Name'], columns=['Monat'],
                          aggfunc={'Wert': np.sum}, margins=True).fillna('')

来自我的原始数据框:

df
Area Name2 Monat Wert
A    A      1     2
A    A      1     3
A    B      1     2
A    A      2     1

所以数据透视表如下所示:

          Wert
     Monat 1   2  All
Area  Name 
A     A    5   1  6
      B    2      2
All        7   1  8

然后我想用以下代码将它保存在一个 excel 工作簿中:

import pandas as pd
import xlsxwriter
workbook = xlsxwriter.Workbook('myexcel.xlsx)
worksheet1 = workbook.add_worksheet('table1')
caption = 'Table1'
worksheet1.set_column(1, 14, 25) #irrelevant, just a random size right now
worksheet1.write('B1', caption)
worksheet1.add_table('B3:K100', {'data': table.values.tolist()}) #also wrong size from B3 to K100
workbook.close()

但这看起来像这样(具有不同的值),因此缺少标题:

如何调整它并在 Excel 中保存数据透视表?

如果我使用 pandas 命令.to_excel,它看起来像这样:

这很好,但列名不尊重名称的宽度,背景颜色也不好看,而且我也错过了捕获。

【问题讨论】:

  • 您是否考虑过使用其.to_excel() 方法简单地导出熊猫数据框?
  • 我做了这个,但是看起来不太好,您认为先导出然后调整它更好吗?
  • 定义“不太好”。如果是索引困扰您,可以选择index=False 来阻止它出现。
  • 单元格宽度、布局、数字格式
  • 单元格宽度是查看器上的一个选项,它与 pandas 无关,也与 xlsxwriter 无关。您可以使用to_excelfloat_format 选项和布局调整数字格式,这对我来说不清楚。您能否将这些详细信息添加到您的问题中?

标签: python excel pandas xlsxwriter


【解决方案1】:

我找到了结合topic:的解决方案

flattened = pd.DataFrame(table.to_records())
flattened.columns = [column.replace("('Wert', ", "Monat: ").replace(")", "") for column in flattened.columns] ##only for renaming the column headers

然后:

workbook = xlsxwriter.Workbook(excelfilename, options={'nan_inf_to_errors': True})
worksheet = workbook.add_worksheet('Table1')
worksheet1.set_column(0, flattned.shape[1], 25)
worksheet.add_table(0, 0, flattened.shape[0], flattened.shape[1]-1,
    {'data': flattened.values.tolist(),
    'columns': [{'header': c} for c in flattened.columns.tolist()],
    'style': 'Table Style Medium 9'})
workbook.close()

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 2021-02-28
    • 2023-01-11
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多