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

python,读取,大量,excel,文件,文件批量,计算,平均值 · 浏览次数 : 608

小编点评

**代码解析:** ```python # -*- coding: utf-8 -*-\"" import numpy as np from openpyxl import load_workbookfile_path # 定义文件路径 output_path = 'F:/班长/2020-2021综合测评与评奖评优/01_综合测评/地信XXXX班互评打分表.xlsx' # 获取所有Excel文件路径 all_excel_paths = os.listdir(file_path) # 创建二维数组,存放每一位同学、每一项项目的平均分数 all_mean_score = np.zeros((len(all_excel_paths), len(all_excel_paths[0])), dtype=float) # 遍历所有Excel文件 for file_num in range(1, len(all_excel_paths) + 1): # 打开第一个打分Excel文件 now_excel = load_workbook(file_path + all_excel_paths[file_num]) # 获取打分文件的全部Sheet名称 all_sheet_names = now_excel.get_sheet_names() # 遍历所有Sheet for sheet_name in all_sheet_names: # 获取第一个Sheet now_sheet = now_excel.get_sheet_by_name(sheet_name) # 遍历所有单元格 for row in range(1, now_sheet.max_row + 1): for column in range(1, now_sheet.max_column + 1): # 获取单元格数据 single_score = now_sheet.cell(row, column).value # 如果单元格为空,跳过 if single_score is None: continue # 添加到二维数组中 all_mean_score[row - 1, column - 1] += single_score # 写入最终结果文件 output_excel = load_workbook(output_path) output_sheet = output_excel.active # 遍历二维数组,写入最终结果 for output_row in range(1, len(all_excel_paths) + 1): for output_column in range(1, len(all_excel_paths[0]) + 1): output_sheet.cell(output_row, output_column).value = all_mean_score[output_row - 1, output_column - 1] # 保存结果文件 output_excel.save(output_path) ``` **使用说明:** 1. 将文件路径替换为实际路径。 2. 将输出文件路径替换为您想要保存结果文件的路径。 3. 运行程序。

正文

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

  至此,大功告成。

与Python读取大量Excel文件并跨文件批量计算平均值相似的内容:

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

本文介绍基于Python语言,实现对多个不同Excel文件进行数据读取与平均值计算的方法~

< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?

介绍史上最全PYTHON文件类型读写库大盘点!包含常用和不常用的大量文件格式!文本、音频、视频应有尽有!废话不多说!走起来!

基于Python的性能分析

1、什么是性能分析 字面意思就是对程序的性能,从用户角度出发就是运行的速度,占用的内存。 通过对以上情况的分析,来决定程序的哪部份能被优化。提高程序的速度以及内存的使用效率。 首先我们要弄清楚造成时间方面性能低的原因有哪些 沉重的I/O操作,比如读取分析大文件,长时间执行数据库查询,调用外部服务例如

3.0 Python 迭代器与生成器

当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出。此时,我们可以采用迭代器`Iterator`和生成器`Generator`的方法,逐个地处理数据,从而避免内存溢出的问题。迭代器是一个可以逐个访问元素的对象,它实现了`python`的迭代协议,即实现了`__iter__()`和`__next__()`方法。通过调用`__next__()`方法,我们可以逐个访问迭代

算法金 | 只需十四步:从零开始掌握Python机器学习(附资源)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 1. 引言 1.1 教程目的与读者定位 "启程"往往是最具挑战性的一步,特别是在面临众多选择时,人们往往难以做出决策。本教程旨在帮助那些几乎没有Python机器学习基础的初学者成长为知识

GitHub 开源了多款字体「GitHub 热点速览 v.22.48」

本期 News 快读有 GitHub 官方大动作一下子开源了两款字体,同样大动作的还有 OpenAI 发布的对话模型 ChatGPT,引燃了一波人机对话。 项目这块,也许会成为新的 Web 开发生产力工具的 leptos 和 Python UI 库 CustomTkinter,还有提升开发体验的 j

我从 Python 潮流周刊提取了 800 个链接,精选文章、开源项目、播客视频集锦

你好,我是豌豆花下猫。前几天,我重新整理了 Python 潮流周刊的往期分享,推出了第 1 季的图文版电子书,受到了很多读者的一致好评。 但是,合集和电子书的篇幅很长,阅读起来要花不少时间。所以,为了方便大家阅读,我打算将合集进一步整理,分门别类将原始内容的标题罗列出来。 本文总计约 800 个链接

[转帖]python读取配置文件获取所有键值对_python总结——处理配置文件(ConfigParser)

python处理ConfigParser 使用ConfigParser模块读写ini文件 (转载) ConfigParserPython 的ConfigParser Module中定义了3个类对INI文件进行操作。分别是RawConfigParser、ConfigParser、 SafeConfig

Python读取txt文本

转载:Python读取txt文本三种方式 python常用的读取文件函数有三种read()、readline()、readlines() read() 一次性读取所有文本,在读取文本中含有中文时是gkd,打开时需要定义编码为utf-8 with open("1.txt", "r", encoding

Python 读取图片 转 base64 并生成 JSON

Python 读取图片 转 base64 并生成 JSON ```python import json import base64 img_path = r'D:\OpenSource\PaddlePaddle\PaddleOCR\images\005.jpeg'; with open(img_pa