首页 > 编程语言 >Python读取大量Excel文件并跨文件批量计算平均值

Python读取大量Excel文件并跨文件批量计算平均值

时间:2023-02-01 21:55:06浏览次数:38  
标签:文件批量 sheet Python Excel column output now 打分 row

  本文介绍基于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)

  至此,大功告成。

标签:文件批量,sheet,Python,Excel,column,output,now,打分,row
From: https://www.cnblogs.com/fkxxgis/p/17084253.html

相关文章

  • Python标准库中的编码风格整理
    目的:提高源程序的质量和可维护性缩进一律使用4个空格代表一层缩进,不允许使用Tab一行字符最多为79个,既在80列时换行对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在......
  • Python实现文件编码转换GB2312、GBK、UTF-8
    Python实现文件编码转换GB2312、GBK、UTF-81、查看文件编码格式importchardetfilename='./flash.c'withopen(filename,'rb')asf:data=f.read()encoding_ty......
  • Python网络编程—TCP客户端和服务器
    Python网络编程—TCP客户端和服务器客户端importsocket'''客户端创建步骤:1、创建网络套接字2、连接到目标IP地址和端口3、收发数据4、关闭套接字'''IP=socket.gethostnam......
  • Python连接MySQL数据库
    Python连接MySQL数据库安装MySQL参考链接安装NavicatPremium16参考链接连接MySQL安装库pipinstallpymysqlMySQL封装#!/usr/bin/envpython#-*-coding:ut......
  • python语言命名规则
    和C/C++、Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展......
  • Python 笔记 2
    序列常用序列有:字符串,列表,元组,字典,集合此图提前展示列表列表的创建使用[]列表的创建与元素的提取法一:法二:list()创建[========]range()创建一个整数列表标准......
  • linux离线部署python项目
    离线部署直接在内网隔离的环境中。不能直接pipinstall或者apt-getinstall(Ubuntu、Debain)准备:与离线环境相同版本的服务器Python(web)项目依赖pipwheel强大的pip命......
  • Python之字典查找元素(3种方式)
    本文描述的是查找字典的某一个元素(字典遍历元素请点击->这里)上下文代码smart_girl={"name":"yuanwai","age":25,"sex":"女"} 第一种方式:[]注意:这种......
  • python连接mysql并使用
    由于mysql体积小,速度快,成本低,源码开放,所以一些中小型系统开发都采用mysql我们连接mysql采用的工具包是pymysql1.安装pymysqlpipinstallpymysql2.pymysql工作图......
  • 【8】Python3之面向对象
    1、面向对象基本概念 3、类的概念对象如何产生?又是如何规定对象的属性和方法呢?答:在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要......