如何使用带索引的 OpenPyXl 将多级索引导出到 excel

How to export a multilevel index to excel using OpenPyXl with Index

如何使用带有列标题的 openpyxl 将 pandas **multi-index 数据框 ** 的结果导出到 excel和指数值?

我假设我需要在 dataframe_to_rows() 方法中设置 index=True。但是,当我这样做时,它会抛出一个 ValueError:说明它无法将 IndexLabel 值转换为 excel。例如:

ValueError: Cannot convert ('Elf', 'Elrond') to Excel

我希望加载到 excel 的内容与此类似:

我的当前代码

import openpyxl
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from pathlib import Path

multi_df = df.set_index(['Film', 'Chapter', 'Race', 'Character']).sort_index()
subset_df = multi_df.loc[('The Fellowship Of The Ring', '01: Prologue'), :]

# Read in TEMPLATE file from which a copy of the Template will be populated 
outfile = 'TEST_Pivot2XL_TEMPLATE.xlsx'
template_filename = 'YYMMDD-YYMMDD_LOTR_TEMPLATE.xlsx'
wb = openpyxl.load_workbook(Path(Path.cwd() / "ReportFiles" / "Summary" / str(template_filename)))

ws = wb["myPivot"]
for r in dataframe_to_rows(subset_df, index=True, header=True):
    ws.append(r)

wb.save(file)

注意: 我有一个现有的 excel 模板文件,其中有一个空的 Sheet 标题为“myPivot”,我想写我的枢轴 table 进入.

我使用的数据集在这里: https://www.kaggle.com/mokosan/lord-of-the-rings-character-data?select=WordsByCharacter.csv

看来这应该可以解决您的问题:

import pandas as pd
from openpyxl import load_workbook

df = pd.DataFrame({('A', 'A1'): [1, 2, 3],
              ('A', 'A2'): [4, 5, 6],
              ('B', 'B1'): [7, 8, 9]}).T
print(f'original dataframe:\n {df.head()}')
filename = 'test.xlsx'
writer = pd.ExcelWriter(filename, engine='openpyxl', mode='a')
writer.book = load_workbook(filename)
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
df.to_excel(writer, 'sheet1')
writer.save()

输出:

original dataframe:
       0  1  2
A A1  1  2  3
  A2  4  5  6
B B1  7  8  9

Excel 文件:

工作目录中应存在一个名为 test.xlsx 的文件,代码才能运行。请注意,它将写入 sheet 的开头,而不是附加到已经存在的内容。

p.s - 对 writer.bookwriter.sheets 的赋值似乎毫无用处,但 ExcelWriter 使用它们来确定哪些 sheet 已经存在,哪些不存在改写新的。