所以我关注这个网站已经有一段时间了,因为我有关于Python的知识库。我决定第一个问题就把自己扔到深底,所以希望有人能帮助我。
我目前有以下问题:尝试将Pandas数据透视表打印到预定义的excel模板中,例如从单元格C5
代码在下面,我通过CSV加载的表也在那里
from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.utils import get_column_letter
from openpyxl import load_workbook
from openpyxl.styles import Alignment
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
pnl_lst = pd.read_csv('data_test.csv', index_col=0)
pnl_lst = pd.DataFrame(pnl_lst, columns=['Fruit_Veg', 'Item', 'AmountSold','AmountRotten','#ofpickers'])
pnl_lst = pnl_lst.groupby('Fruit_Veg').apply(lambda x: x.pivot_table(index=['Item'],aggfunc='sum',margins=True,margins_name='Total'))
print(pnl_lst)
通过data_test.csv输入表
下面是我如何将pandas数据框的输出写入excel模板的。请注意,如果数据已经存在于您试图写入数据框的单元格中,则不会覆盖数据框,数据框将被写入新工作表,这是由于我包含了从模板中清除现有数据的步骤。我没有尝试在合并的单元格上写入输出,因此可能会抛出错误。
设置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()