簡體   English   中英

Python:將 pandas pivot 表寫入 ZBF57C906FA7D2BB66D07372E41585D9 表

[英]Python: Writing a pandas pivot table to an excel template

所以我一直在關注這個網站一段時間,了解我關於 Python 的知識庫。 決定在我的第一個問題上深究,所以希望有人能夠幫助我。

我目前遇到以下問題:嘗試將 Pandas Pivot 表打印到預定義的 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 輸入表

Fruit_Veg 物品 售出金額 金額爛 #ofpickers
1 水果 蘋果 0.907502 0.176108 0.365398
2 蔬菜 蘿卜 0.707491 0.644805 0.375513
3 水果 0.898554 0.724919 0.338557
4 水果 覆盆子 0.284849 0.023705 0.80169
5 蔬菜 土豆 0.205464 0.682219 0.834467
6 蔬菜 茄子 0.644248 0.531195 0.970782

生成的 output (表格變得奇怪,但第一列中的 Fruit 和 Veg 是合並的單元格):

Fruit_Veg 物品 #ofpickers 金額爛 售出金額
水果 蘋果 0.365398283 0.176107564 0.907502485
0.338556856 0.724919365 0.898554328
覆盆子 0.801690277 0.02370525 0.284848945
全部的 1.505645416 0.924732179 2.090905758
蔬菜 茄子 0.970782439 0.531195328 0.644248183
蘿卜 0.375513124 0.644804957 0.707491361
土豆 0.834466661 0.682219111 0.20546385
全部的 2.180762224 1.858219396 1.557203394

嘗試過的想法(遺憾的是沒有運氣):

  • 我可以使用 XlsxWriter 打印 pandas pivot 表,但這是寫入單獨的 excel 文件,而不是我需要的模板;
  • 使用 Openpyxl 將 pivot 表寫入 excel 模板,但沒有運氣,因為格式完全錯誤,它無法將 pivot 表轉換為可讀的模塊然后寫入
  • 嘗試使用 pandas GroupBy function 復制我的 pivot 表。 根據上面的 output,我不太清楚如何讓 Totals 出現在每個 Fruit_Veg 部分下。

有沒有人有任何明智的想法?

非常感謝!

以下是我如何將 output 從 pandas dataframe 寫入 ZBF57C906FA7D15BB66DD96732 模板。 請注意,如果數據已經存在於您嘗試寫入 dataframe 的單元格中,它不會被覆蓋,並且 dataframe 將被寫入新工作表,我已經包含了從模板中清除現有數據的步驟. 我沒有嘗試在合並的單元格上寫 output ,這樣可能會引發錯誤。

設置

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 模板中設置第一行和第一列,其中 output 將被粘貼。 如果要從單元格 N2 開始粘貼我的 output,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="")

將 dataframe 寫入 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM