Python實(shí)現(xiàn)讀取大量Excel文件并跨文件批量計(jì)算平均值
本文介紹基于Python語(yǔ)言,實(shí)現(xiàn)對(duì)多個(gè)不同Excel文件進(jìn)行數(shù)據(jù)讀取與平均值計(jì)算的方法。
首先,讓我們來(lái)看一下具體需求:目前有一個(gè)文件夾,其中存放了大量Excel文件;文件名稱是每一位同學(xué)的名字,即文件名稱沒(méi)有任何規(guī)律。
而每一個(gè)文件都是一位同學(xué)對(duì)全班除了自己之外的其他同學(xué)的各項(xiàng)打分,我們以其中一個(gè)Excel文件為例來(lái)看:
可以看到,全班同學(xué)人數(shù)(即表格行數(shù))很多、需要打分的項(xiàng)目(即表格列數(shù))有11
個(gè)(不算總分);同時(shí),由于不能給自己打分,導(dǎo)致每一份表格中會(huì)有一行沒(méi)有數(shù)據(jù)。
而我們需要做的,就是求出每一位同學(xué)的、11
個(gè)打分項(xiàng)目分別的平均分,并存放在一個(gè)新的、表頭(行頭與列頭)與大家打分文件一致的總文件中,如下圖。其中,每一個(gè)格子都代表了這位同學(xué)、這一項(xiàng)打分項(xiàng)目在經(jīng)過(guò)班級(jí)除其之外的每一位同學(xué)打分后計(jì)算出的平均值。
可以看到,一個(gè)人就需要算11
次平均,更何況一個(gè)班會(huì)有數(shù)十位同學(xué)。如果單獨(dú)用Excel計(jì)算,是非常麻煩的。
而借助Python,就會(huì)簡(jiǎn)單很多。具體代碼如下。在這里,就不再像平日里機(jī)器學(xué)習(xí)、深度學(xué)習(xí)代碼博客那樣,對(duì)代碼加以逐段、分部分的具體解釋了,直接列出全部代碼,大家參考注釋即可理解。
# -*- coding: utf-8 -*- """ Created on Thu Apr 8 16:24:41 2021 @author: fkxxgis """ import os import numpy as np from openpyxl import load_workbook file_path='F:/班長(zhǎng)/2020-2021綜合測(cè)評(píng)與評(píng)獎(jiǎng)評(píng)優(yōu)/01_綜合測(cè)評(píng)/地信XXXX班互評(píng)打分表/' #這里是每一位同學(xué)打分Excel文件存放的路徑 output_path='F:/班長(zhǎng)/2020-2021綜合測(cè)評(píng)與評(píng)獎(jiǎng)評(píng)優(yōu)/01_綜合測(cè)評(píng)/地信XXXX班綜合素質(zhì)測(cè)評(píng)互評(píng)打分表.xlsx' #這里是最終結(jié)果存放路徑,請(qǐng)不要和上述路徑一致 first_row=5 #第一個(gè)分?jǐn)?shù)所在的行數(shù) first_column=3 #第一個(gè)分?jǐn)?shù)所在的列數(shù) all_row=32 #班級(jí)同學(xué)總數(shù) all_column=11 #需要計(jì)算的分?jǐn)?shù)項(xiàng)目個(gè)數(shù) all_excel=os.listdir(file_path) #獲取打分文件路徑下全部Excel文件 file_row=first_row+all_row-1 file_column=first_column+all_column-1 all_mean_score=np.zeros((file_row,file_column),dtype=float) #新建一個(gè)二維數(shù)組,存放每一位同學(xué)、每一項(xiàng)項(xiàng)目的分?jǐn)?shù)平均值 for now_row in range(first_row,file_row+1): for now_column in range (first_column,file_column+1): all_score=[] for excel_num in range(0,len(all_excel)): now_excel=load_workbook(file_path+all_excel[excel_num]) #打開(kāi)第一個(gè)打分Excel文件 all_sheet=now_excel.get_sheet_names() #獲取打分文件的全部Sheet名稱 now_sheet=now_excel.get_sheet_by_name(all_sheet[0]) #本文中分?jǐn)?shù)全部存儲(chǔ)于第一個(gè)Sheet,因此下標(biāo)為0 single_score=now_sheet.cell(now_row,now_column).value #獲取對(duì)應(yīng)單元格數(shù)據(jù) if single_score==None: #如果這個(gè)單元格為空(也就是自己不給自己打分的那一行) pass else: all_score.append(single_score) all_mean_score[now_row-1,now_column-1]=np.mean(all_score) #計(jì)算全部同學(xué)為這一位同學(xué)、這一個(gè)打分項(xiàng)目所打分?jǐn)?shù)的平均值 output_excel=load_workbook(output_path) #讀取結(jié)果存放Excel output_all_sheet=output_excel.get_sheet_names() #這里代碼含義同上 output_sheet=output_excel.get_sheet_by_name(output_all_sheet[0]) output_sheet=output_excel.active for output_now_row in range(first_row,file_row+1): for output_now_column in range (first_column,file_column+1): exec("output_sheet.cell(output_now_row,output_now_column).value=all_mean_score[output_now_row-1,output_now_column-1]") #將二維數(shù)組中每一位同學(xué)、每一項(xiàng)打分項(xiàng)目的最終平均分?jǐn)?shù)寫入結(jié)果文件的對(duì)應(yīng)位置 output_excel.save(output_path)
至此,大功告成。
到此這篇關(guān)于Python實(shí)現(xiàn)讀取大量Excel文件并跨文件批量計(jì)算平均值的文章就介紹到這了,更多相關(guān)Python讀取Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python的Django框架中創(chuàng)建語(yǔ)言文件
這篇文章主要介紹了在Python的Django框架中創(chuàng)建語(yǔ)言文件的方法,以語(yǔ)言代碼來(lái)表示語(yǔ)言區(qū)域種類,需要的朋友可以參考下2015-07-07Python爬蟲爬取王者榮耀英雄信息并保存到圖數(shù)據(jù)庫(kù)的操作方法
本文介紹了如何使用Python爬蟲技術(shù)從王者榮耀官方獲取英雄信息,并將數(shù)據(jù)保存到圖數(shù)據(jù)庫(kù)中,文章詳細(xì)說(shuō)明了爬取英雄名稱、類型及皮膚名稱的過(guò)程,并展示了創(chuàng)建英雄類型節(jié)點(diǎn)和英雄信息節(jié)點(diǎn)的方法2024-09-09用Python實(shí)現(xiàn)服務(wù)器中只重載被修改的進(jìn)程的方法
這篇文章主要介紹了用Python實(shí)現(xiàn)服務(wù)器中只重載被修改的進(jìn)程的方法,包括用watchdog來(lái)檢測(cè)文件的變化等,實(shí)現(xiàn)起來(lái)充分體現(xiàn)了Python作為動(dòng)態(tài)語(yǔ)言的靈活性,強(qiáng)烈推薦!需要的朋友可以參考下2015-04-04python百行代碼實(shí)現(xiàn)漢服圈圖片爬取
這篇文章主要為大家介紹了使用python百行代碼來(lái)實(shí)現(xiàn)漢服圈的圖片爬取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11