在现代办公场景中,Excel 是不可或缺的工具,但其重复性操作往往让人感到枯燥。本文将通过一个实际案例,展示如何使用 Python 自动化处理学生成绩表,包括计算班级平均分、分班存储成绩并按分数排序。最终,我们将生成一个按班级分 sheet 的 Excel 文件。
需求描述
假设我们有一张学生成绩表,包含以下字段:
- 班级:学生所属班级。
- 姓名:学生姓名。
- 成绩:学生的考试成绩。
需求如下:
- 计算每个班级的平均分。
- 将每个班级的成绩按分数从高到低排序。
- 将结果存储到一个 Excel 文件中,每个班级的成绩存储在独立的 sheet 中。
实现思路
实现的主要步骤如下:
- 加载数据:读取原始 Excel 文件或 CSV 文件。
- 分组计算平均分:按照班级分组,计算平均分。
- 按班级分 sheet:对每个班级成绩排序后,存储到独立的 sheet 中。
- 保存结果:生成一个多 sheet 的 Excel 文件。
实现代码
以下是完整的 Python 实现代码,使用了 pandas
和 openpyxl
两个库。
1. 加载必要的库
import pandas as pd
from openpyxl import Workbook
2. 读取原始成绩表
我们假设成绩表存储在 scores.xlsx
文件中,包含三个字段:班级、姓名、成绩。
# 读取 Excel 文件
file_path = "scores.xlsx"
data = pd.read_excel(file_path) # 查看数据
print(data.head())
3. 计算班级平均分
使用 pandas
提供的分组功能按班级计算平均分:
# 按班级分组并计算平均分
average_scores = data.groupby("班级")["成绩"].mean().reset_index()
average_scores.rename(columns={"成绩": "平均分"}, inplace=True) # 打印平均分
print("班级平均分:\n", average_scores)
4. 按班级分 sheet 存储
我们将每个班级的数据筛选出来,按分数从高到低排序后存储到单独的 sheet 中。
# 创建一个新的 Excel 工作簿
output_file = "成绩分班.xlsx"
with pd.ExcelWriter(output_file, engine="openpyxl") as writer: # 遍历每个班级
for class_name, group_data in data.groupby("班级"): # 按成绩从高到低排序
sorted_group = group_data.sort_values(by="成绩", ascending=False) # 写入到对应的 sheet
sorted_group.to_excel(writer, sheet_name=f"班级 {class_name}", index=False) # 额外创建一个 sheet 保存班级平均分
average_scores.to_excel(writer, sheet_name="班级平均分", index=False)
示例数据与结果
示例输入数据
班级 | 姓名 | 成绩 |
---|---|---|
1 班 | 张三 | 85 |
1 班 | 李四 | 78 |
2 班 | 王五 | 90 |
2 班 | 赵六 | 95 |
1 班 | 钱七 | 88 |
结果展示
1. 班级平均分 Sheet
班级 | 平均分 |
---|---|
1 班 | 83.67 |
2 班 | 92.5 |
2. 班级 1 班 Sheet
班级 | 姓名 | 成绩 |
---|---|---|
1 班 | 钱七 | 88 |
1 班 | 张三 | 85 |
1 班 | 李四 | 78 |
3. 班级 2 班 Sheet
班级 | 姓名 | 成绩 |
---|---|---|
2 班 | 赵六 | 95 |
2 班 | 王五 | 90 |
总结
通过这段代码,我们可以实现以下自动化操作:
- 快速计算班级平均分。
- 将数据按班级分组并排序。
- 将处理后的结果存储到独立的 sheet 中,方便查看和分享。
这种方式极大地减少了人工操作的时间,尤其适合于需要处理大量数据和分组操作的场景。无论是学校的成绩处理,还是企业的数据分析,这种自动化流程都可以大幅提升效率。
代码扩展:如果你需要对成绩添加更复杂的统计,比如分数段人数统计、最高分和最低分计算,也可以在此基础上轻松扩展!