自动化办公 | 根据成绩进行自动评级
今天我们将介绍一个常见的自动化办公需求:根据成绩自动评级。通过这篇文章,我们将介绍如何利用Python进行自动化办公,将表格中的成绩根据预定的规则进行评级,并生成一个新的带评级信息的表格。
需求背景
我们有一个表格,表格内容如下:
| 班级 | 姓名 | 成绩 |
| 一班 | 张三 | 95 |
| 一班 | 李四 | 88 |
| 一班 | 王五 | 92 |
| 一班 | 赵六 | 59 |
| 一班 | 刘七 | 72 |
| 一班 | 孙八 | 60 |
需要根据成绩将每个学生进行评级,评级规则如下:
- A:成绩大于 90
- B:成绩大于等于 75 且小于 90
- C:成绩大于等于 60 且小于 75
- D:成绩小于 60
目标
通过自动化脚本,将原始表格中的成绩根据以上规则进行评级,并生成一个新的表格,增加评级字段,方便后续分析和统计。
解决方案
1. 技术栈
- Pandas:用于处理和操作表格数据。
- openpyxl:用于读取和写入Excel文件。
- Python:脚本语言,负责实现自动化处理和评级逻辑。
2. 步骤解析
2.1 读取表格
首先,我们需要使用 Pandas 来读取表格中的数据。Pandas 提供了非常方便的函数,可以直接从 Excel 文件中读取数据,并转换为 DataFrame 格式,便于后续操作。
2.2 添加评级字段
根据成绩,使用自定义的函数进行评级。我们可以为每个学生的成绩添加一个新的评级字段。这个操作可以通过 apply() 函数实现,快速批量处理。
2.3 保存新表格
最后,处理完的数据可以保存回新的 Excel 文件。我们可以通过 pandas 将处理后的数据导出为 Excel 文件,或者使用 openpyxl 完成更多定制化操作。
3. 完整代码实现
import pandas as pd# 读取Excel文件
df = pd.read_excel("成绩单.xlsx")# 定义评级函数
def grade(score):if score > 90:return 'A'elif score >= 75:return 'B'elif score >= 60:return 'C'else:return 'D'# 使用apply函数为每个学生添加评级
df['评级'] = df['成绩'].apply(grade)# 保存结果到新的Excel文件
df.to_excel("成绩单_评级.xlsx", index=False)print("处理完成,已保存为 '成绩单_带评级.xlsx'")
4. 代码解析
-
读取 Excel 文件: 我们使用
pd.read_excel()函数读取原始的成绩表格,并将其存储为一个 Pandas DataFrame 对象。DataFrame是 Pandas 中用来处理表格数据的核心数据结构。 -
定义评级函数:
grade()函数根据给定的成绩来返回对应的评级。这个函数的逻辑非常简单,通过一系列if-else判断来实现。 -
批量应用评级函数: 使用
df['成绩'].apply(grade)将grade()函数应用到每一行的“成绩”字段。apply()方法是 Pandas 中常用的高效批量处理函数。 -
保存新表格:
df.to_excel()将处理后的 DataFrame 保存为一个新的 Excel 文件。index=False表示不保存行索引。
5. 处理后的结果
经过自动化处理,原始的表格数据将变成以下格式:
| 班级 | 姓名 | 成绩 | 评级 |
| 一班 | 张三 | 95 | A |
| 一班 | 李四 | 88 | B |
| 一班 | 王五 | 92 | A |
| 一班 | 赵六 | 59 | D |
| 一班 | 刘七 | 72 | C |
| 一班 | 孙八 | 60 | C |
6. 优化与扩展
6.1 批量处理多个表格
如果你需要对多个 Excel 文件进行相同的处理,只需将读取和处理的部分包装成函数,并传入不同的文件路径即可。可以通过 os 库实现文件遍历,批量处理多个文件。
6.2 自定义评级规则
假设你需要根据不同的情况进行不同的评级,比如更改评分标准或添加额外的条件,修改 grade() 函数即可。这种灵活性使得这个脚本非常适合用于不同的业务需求。
6.3 处理异常情况
在实际应用中,可能会遇到缺失数据或异常成绩(如非数字值、空值等)。你可以在 grade() 函数中添加错误处理逻辑,例如检查成绩是否为有效的数字,并根据需要返回默认的评级(如 D)。
7. 总结
通过这篇文章,我们展示了如何使用 Python 和 Pandas 完成一个常见的自动化办公需求——根据成绩进行评级。借助 Python 的强大库,我们能够快速读取和处理表格数据,自动化执行评级逻辑,并将处理后的数据导出为新的文件。这种方式不仅减少了人工操作的时间,还提高了处理的准确性和效率。
自动化办公的前景广阔,利用 Python 等编程工具处理数据和完成重复性任务,可以大大提高工作效率,释放更多时间去做创造性工作。如果你也有类似的自动化需求,欢迎通过留言或私信告诉我,我将为你提供免费脚本开发服务!
相关文章:
自动化办公 | 根据成绩进行自动评级
今天我们将介绍一个常见的自动化办公需求:根据成绩自动评级。通过这篇文章,我们将介绍如何利用Python进行自动化办公,将表格中的成绩根据预定的规则进行评级,并生成一个新的带评级信息的表格。 需求背景 我们有一个表格…...
纯血鸿蒙ArkUI线性布局详解
线性布局说明 线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组…...
小程序组件 —— 22 组件案例 - 轮播区域绘制
这一节我们实现轮播图最外层的盒子,也就是把轮播图的最外层搭好,先不给轮播图添加图片,因为图片属于新的组件,组件里面有一些知识点,需要单独分开讲; 回顾一下,在进行传统网页开发时࿰…...
如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?
目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们,学术论文写作的旅程是不是感觉像是走进了迷雾森…...
【置顶】测试学习笔记整理
一、测试开发体系介绍 1.软件测试概念 (1)【理论】软件测试基础概念:软件测试概念、作用、原则、对象,软件缺陷、测试用例 (2)【理论】软件开发流程扫盲:敏捷开发(XP、SCRUM&#…...
新浪微博Java开发面试题及参考答案
怎么判断两个链表是否相交?怎么优化? 判断两个链表是否相交可以采用多种方法。 一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指…...
【SQL Server】教材数据库(1)
1 利用sql建立教材数据库,并定义以下基本表: 学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号…...
Windows系统下载、部署Node.js与npm环境的方法
本文介绍在Windows电脑中,下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm(Node Package Manager)则…...
SQL 总结
SQL 总结 引言 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。自1974年首次提出以来,SQL已成为数据库领域中不可或缺的一部分。它允许用户执行各种操作,如查询、更新、插入和删除数据库中的数据。本文旨在提…...
设计一个基于Spring Boot开发的电商网站,部署在阿里云上
系统架构设计,包含网络、部署架构等关键信息,要保证系统的高可用。设计中请明确指出使用的产品名称。 为了设计一个基于Spring Boot开发的电商网站系统架构,并确保其高可用性,以下是一个详细的系统架构设计方案,包含网…...
Java jni调用nnom rnn-denoise 降噪
介绍:https://github.com/majianjia/nnom/blob/master/examples/rnn-denoise/README_CN.md 默认提供了一个wav的例子 #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h>#include …...
C++软件设计模式之状态模式
在C设计模式中,状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为,使对象看起来似乎修改了其类。状态模式的主要动机、意图和适用场合如下: 动机 在面向对象的设计中&…...
Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
1. /MT,/MTd,/MD,/MDd的含义 /MT,/MTd,/MD,/MDd是 Microsoft Visual C 编译器的运行时库链接选项。它们决定了程序如何链接 C 运行时库(CRT)。具体含义如下: /MT&#x…...
谷粒商城项目125-spring整合high-level-client
新年快乐! 致2025年还在努力学习的你! 你已经很努力了,今晚就让自己好好休息一晚吧! 在后端中选用哪种elasticsearch客户端? elasticsearch可以通过9200或者9300端口进行操作 1)9300:TCP spring-data-elasticsearch:transport-…...
日期时间选择(设置禁用状态)
目录 1.element文档需要 2.禁用所有过去的时间 3.设置指定日期的禁用时间 <template><div class"block"><span class"demonstration">起始日期时刻为 12:00:00</span><el-date-pickerv-model"value1"type"dat…...
基于SpringBoot的题库管理系统的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
钉钉h5微应用安卓报错error29 ios报错error3 加上报错52013,签名校验失败 (前端)
这两个都是应为 免登报错52013,签名校验失败 用户后端签名使用的url地址和前端访问地址需要严格一致,包括端口号。前端部分可以用alert显示出当前的location.href,后端部分请在签名的时候打印日志。 访问通过反向代理服务器、各种NAT等场景下…...
Vue.js组件开发-客户端如何限制刷新Token次数
在Vue.js组件开发中,限制刷新Token的次数是一个重要的安全措施,可以防止恶意用户或攻击者无限次尝试刷新Token。 客户端限制 在客户端,可以通过Vuex、localStorage或sessionStorage等存储机制来跟踪刷新Token的尝试次数。以下是一个基本的实…...
Linux上安装jdk
在线环境的话,通过命令下载,离线环境的话,组要自行去oracle官网下载后上传 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jd…...
Ardunio BLE keyboard 库的使用
为了开发一个 ardunio 的蓝牙选歌器,网络上普遍推荐使用: https://github.com/T-vK/ESP32-BLE-Keyboard 结果搞了好几天,就是不行。最后发现,下面两点非常重要: 使用 NimBle-ardunio 库这个库目前是2.1.2 ÿ…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
