如何使用 excel 中的 xlsxwriter 保存 pandas 数据透视表 table
How to save a pandas pivot table with xlsxwriter in excel
我想将一个 pandas 数据透视表 table 保存到一个 excel 工作簿中。
我有一个 pandas 主元 table,基于这个公式:
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
所以枢轴 table 看起来像这样:
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()
但这看起来像这样(具有不同的值),因此缺少 headers:
如何调整它并在 excel 中保存枢轴 table?
如果我使用 pandas 命令 .to_excel
它看起来像这样:
很好,但是列名称不符合名称的宽度,背景颜色看起来也不好看,而且我还缺少捕获。
我找到了结合这个
的解决方案
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()
我想将一个 pandas 数据透视表 table 保存到一个 excel 工作簿中。
我有一个 pandas 主元 table,基于这个公式:
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
所以枢轴 table 看起来像这样:
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()
但这看起来像这样(具有不同的值),因此缺少 headers:
如何调整它并在 excel 中保存枢轴 table?
如果我使用 pandas 命令 .to_excel
它看起来像这样:
很好,但是列名称不符合名称的宽度,背景颜色看起来也不好看,而且我还缺少捕获。
我找到了结合这个
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()