Python实现读取大量Excel文件并跨文件批量计算平均值
作者:疯狂学习GIS 发布时间:2023-10-21 06:53:12
标签:Python,Excel,平均值
本文介绍基于Python语言,实现对多个不同Excel文件进行数据读取与平均值计算的方法。
首先,让我们来看一下具体需求:目前有一个文件夹,其中存放了大量Excel文件;文件名称是每一位同学的名字,即文件名称没有任何规律。
而每一个文件都是一位同学对全班除了自己之外的其他同学的各项打分,我们以其中一个Excel文件为例来看:
可以看到,全班同学人数(即表格行数)很多、需要打分的项目(即表格列数)有11
个(不算总分);同时,由于不能给自己打分,导致每一份表格中会有一行没有数据。
而我们需要做的,就是求出每一位同学的、11
个打分项目分别的平均分,并存放在一个新的、表头(行头与列头)与大家打分文件一致的总文件中,如下图。其中,每一个格子都代表了这位同学、这一项打分项目在经过班级除其之外的每一位同学打分后计算出的平均值。
可以看到,一个人就需要算11
次平均,更何况一个班会有数十位同学。如果单独用Excel计算,是非常麻烦的。
而借助Python,就会简单很多。具体代码如下。在这里,就不再像平日里机器学习、深度学习代码博客那样,对代码加以逐段、分部分的具体解释了,直接列出全部代码,大家参考注释即可理解。
# -*- 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:/班长/2020-2021综合测评与评奖评优/01_综合测评/地信XXXX班互评打分表/' #这里是每一位同学打分Excel文件存放的路径
output_path='F:/班长/2020-2021综合测评与评奖评优/01_综合测评/地信XXXX班综合素质测评互评打分表.xlsx' #这里是最终结果存放路径,请不要和上述路径一致
first_row=5 #第一个分数所在的行数
first_column=3 #第一个分数所在的列数
all_row=32 #班级同学总数
all_column=11 #需要计算的分数项目个数
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) #新建一个二维数组,存放每一位同学、每一项项目的分数平均值
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]) #打开第一个打分Excel文件
all_sheet=now_excel.get_sheet_names() #获取打分文件的全部Sheet名称
now_sheet=now_excel.get_sheet_by_name(all_sheet[0]) #本文中分数全部存储于第一个Sheet,因此下标为0
single_score=now_sheet.cell(now_row,now_column).value #获取对应单元格数据
if single_score==None: #如果这个单元格为空(也就是自己不给自己打分的那一行)
pass
else:
all_score.append(single_score)
all_mean_score[now_row-1,now_column-1]=np.mean(all_score) #计算全部同学为这一位同学、这一个打分项目所打分数的平均值
output_excel=load_workbook(output_path) #读取结果存放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]") #将二维数组中每一位同学、每一项打分项目的最终平均分数写入结果文件的对应位置
output_excel.save(output_path)
至此,大功告成。
来源:https://www.cnblogs.com/fkxxgis/p/17084253.html


猜你喜欢
- 接上篇python smtplib模块自动收发邮件功能(一) ,用python smtplib模块实现了发送邮件程序了,那么接下来我们需要现
- 来做一个快速测验-以下代码输出什么?vals := make([]int, 5)for i := 0; i < 5; i++ { va
- 有一道算法题题目的意思是在二维数组里找到一个峰值。要求复杂度为n。解题思路是找田字(四边和中间横竖两行)中最大值,用分治法递归下一个象限的田
- #!/usr/bin/python import os import time im
- 前言今天给大家分享一些Python的基础知识,想要盖好大房子,不把地基打扎实打牢怎么行呢?所以,今天咱们就来学习基础知识,这样后期学习Pyt
- APSchedulerAPScheduler 四个组件分别为:调度器(scheduler)、触发器(trigger),作业存储(job st
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:<!DOCTYPE html><html lang="en&
- 在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的
- 最近做的一个B/S项目,在打印时采用了在IE中嵌入.net winform控件和XML结合的方式(参见http://www.yesky.co
- 大家都知道Vue.js是中国人创造出来的,简单易用,所以必须要支持一下Vue采用的MVVM设计模式也就是说model和view绑定 mode
- 说到转置操作,顺便提及矩阵与数组的区别:矩阵:数学里的概念,其元素只能是数值,这也是区别于数组的根本所在数组:计算机中的概念,代表一种数据组
- 前文学习:python数据结构:数据类型.python数据结构输入输出及控制和异常.今天我们来学习面向对象编程,面向对象这种编程方式非常重要
- 一、默认参数python为了简化函数的调用,提供了默认参数机制:def pow(x, n = 2):r = 1 while n > 0
- 内容摘要:MySQL易学易用,附带丰富的技术文档,这两个因素使之被广泛应用。然而,随着MySQL发展加快,即使一个MySQL老手有时也会为该
- 有时网页中会嵌套一个或者多个Frame,此时我们直接去找嵌套在Frame里面的元素会抛出异常,所以在操作的时候我们需要将页面焦点切换到Fra
- Anaconda 实际上是一个软件发行版,它附带了conda、Python和150多个科学包及其依赖项。其中,conda是一个开源的软件包管
- 1、在Django配置搜索结果页的路由映射"""pachong URL Configuration
- 公网与私有网络的判断其实十分简单,只要记住私有网络的三个网段。不过,对于记性不好的人或者学识不是很高的机器来说,有一种判断方法还是有必要的。
- 一、安装pip install pymongo二、连接数据库import pymongo# 方式一client = pymongo.Mong
- 前言问题:我们在放大图片的过程中,放大的目标图像和原图图像之间会存在不同。放大的基本思想:第一步:将目标图像进行缩小到原图像的尺寸,虚拟的将