Python-pandas計算Excel每個工作簿的工作表中值的總和與平均值,連同原信息一起寫入多個sheet

文件路徑如下:在這裏插入圖片描述
ExcelPython.py是當前運行文件,紅框內三個文件是原始數據文件,每個文件內有三個sheet,含日期類型。如下:

在這裏插入圖片描述
我們要計算每個工作簿的工作表中值的總和與平均值,寫入原文件(這裏先複製出一份和原來一樣的文件後寫入新文件)

知識點如下:pandas的函數、讀取多個工作簿下的多個工作表、同時向一個Excel文件內寫入多個sheet,一次寫入多個Excel文件

源碼如下:含主要部分註釋:
在這裏插入圖片描述

#計算每個工作簿的工作表中值的總和與平均值,寫入原文件(這裏先複製出一份和原來一樣的文件後寫入新文件)
def read_sum_excel_2():
    all_workbooks = glob.glob(os.path.join(os.getcwd(),'sales_*.xlsx'))
    for workbook in all_workbooks:
        output_file = 'excel_python_write_{}'.format(os.path.basename(workbook).split('sales_')[1])
        print(output_file)
        all_worksheets = pd.read_excel(workbook,sheet_name=None)
        writer = pd.ExcelWriter(output_file)
        workbook_total_sales = []#每個excel文件內所有sheet加起來的total_sales總數
        workbook_total_averages = []#每個excel文件內所有sheet加起來的total_averages平均數
        for worksheet_name,data in all_worksheets.items():
            #處理日期格式
            data['Purchase Date'] =data['Purchase Date'].dt.strftime('%Y-%m-%d')
            #計算總Sale Amount
            workbook_total_sales.append(data['Sale Amount'].sum())
            total_sale_frame = pd.DataFrame(['Sale_Amount_total','','',data['Sale Amount'].sum(),'']).T
            total_sale_frame.columns = data.columns
            df_new = pd.concat([data,total_sale_frame],ignore_index=True)
            #計算平均Sale Amount
            workbook_total_averages.append(data['Sale Amount'].mean())
            average_sale_frame = pd.DataFrame(['Sale_Amount_average','','',data['Sale Amount'].mean(),'']).T
            average_sale_frame.columns = df_new.columns
            df_new = pd.concat([df_new,average_sale_frame],ignore_index=True)
            #一個excel寫入多個sheet
            df_new.to_excel(writer,sheet_name=worksheet_name,index=False)

        #每個工作簿下工作表信息
        workbook_total = pd.DataFrame(workbook_total_sales).sum()
        workbook_average = pd.DataFrame(workbook_total_averages).mean()
        workbook_stats_data = {
                'workbook_total':workbook_total,
                'workbook_average':workbook_average}
        #每個工作簿下工作表信息總和
        workbook_stats_frame = pd.DataFrame(workbook_stats_data,columns=['workbook_total','workbook_average'])
        workbook_stats_frame.to_excel(writer,sheet_name='count',index=False)#將總和寫入新的sheet裏,作爲全表統計信息
        print(workbook_stats_frame)

        writer.save()

運行,結果如下:
在這裏插入圖片描述原表信息拷貝過來,日期類型做了處理,且新增了兩行和一個sheet,新增count sheet顯示如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章