如何使用带索引的 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.book
和 writer.sheets
的赋值似乎毫无用处,但 ExcelWriter
使用它们来确定哪些 sheet 已经存在,哪些不存在改写新的。
如何使用带有列标题的 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.book
和 writer.sheets
的赋值似乎毫无用处,但 ExcelWriter
使用它们来确定哪些 sheet 已经存在,哪些不存在改写新的。