第五天 用Python批量处理Excel文件,实现自动化办公

用Python批量处理Excel文件,实现自动化办公

一、具体需求

有以下N个表,每个表的结构一样,如下:

需要把所有表数据汇总,把每个人的得分、积分分别加起来,然后按总积分排名,总积分一致时,名次一致且非连续排序;积分一致的前提下,按总得分降序展示,但不改变排名,结果如下:

二、Python开发

1、导入所需的包

复制代码
import pandas as pdimport glob

2、获取所有Excel文件的文件路径

复制代码
excel_files = glob.glob("./样例数据/*.xlsx")

3、将各表数据合并到主DataFrame

复制代码
# 初始化一个空DataFramemerged_df = pd.DataFrame()
# 循环读取每个Excel文件并合并到DataFramefor file in excel_files:    df = pd.read_excel(file, header=1)  # 读取Excel文件,跳过第一行数据    merged_df = merged_df._append(df, ignore_index=True)  # 合并到主DataFrame

4、计算总积分和总排名

复制代码
merged_df['总得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum')  # 计算得分总和merged_df['总积分'] = merged_df.groupby('姓名')['积分'].transform('sum')  # 计算积分总和merged_df.drop_duplicates(subset=['姓名', '总积分'], keep='first', inplace=True)  # 去重

5、以总积分排名

复制代码
merged_df['总排名'] = merged_df['总积分'].rank(ascending=False, method='min')

6、按总积分列的值进行排序,重置索引

复制代码
merged_df = merged_df.sort_values(by=['总积分','总得分'], ascending=[False,False]).reset_index(drop=True)

7、获取需要输出的结果​​​​​​​

复制代码
result_df = pd.DataFrame()result_df = merged_df.loc[:, ['姓名','总得分','总积分','总排名']].copy()

8、将合并后的DataFrame输出到一个新Excel文件

复制代码
result_df.to_excel("总积分及排名.xlsx", index=False)

汇总代码展示如下

python 复制代码
import pandas as pd

import glob


excel_files = glob.glob("./样例数据/*.xlsx")


# 初始化一个空DataFrame
merged_df = pd.DataFrame()

# 循环读取每个Excel文件并合并到DataFrame  append() 方法在DataFrame的末尾添加一行或一列数据 新版本修改为 _append()
for file in excel_files:
    df = pd.read_excel(file, header=1)  # 读取Excel文件,跳过第一行数据
    merged_df = merged_df._append(df, ignore_index=True)  # 合并到主DataFrame


merged_df['总得分'] = merged_df.groupby('姓名')['月度得分'].transform('sum')  # 计算得分总和
merged_df['总积分'] = merged_df.groupby('姓名')['积分'].transform('sum')  # 计算积分总和
merged_df.drop_duplicates(subset=['姓名', '总积分'], keep='first', inplace=True)  # 去重

merged_df['总排名'] = merged_df['总积分'].rank(ascending=False, method='min')


merged_df = merged_df.sort_values(by=['总积分','总得分'], ascending=[False,False]).reset_index(drop=True)


result_df = pd.DataFrame()
result_df = merged_df.loc[:, ['姓名','总得分','总积分','总排名']].copy()

result_df.to_excel('./样例数据/总排名.xlsx', index=False)
相关推荐
meilindehuzi_a13 小时前
深入浅出数据结构:Python 字典(Dict)与集合(Set)的哈希表底层全链路追踪
数据结构·python·散列表
Lucas凉皮13 小时前
20243408 2025-2026-2 《Python程序设计》综合实践报告
python·实验报告
键盘上的猫头鹰13 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
薛定谔的猫-菜鸟程序员13 小时前
2小时智能体开发一个智能体?我用CodeArts Agent 和 AtomCode 开发了一个适老化智能体。
人工智能·python·agent
bigfootyazi14 小时前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python
瑶总迷弟14 小时前
使用 mis-tei 在昇腾310P上部署 bge-m3模型
pytorch·python·华为·语言模型·自然语言处理·cnn·unix
belong_my_offer15 小时前
认识到精通函数
开发语言·python
卡次卡次116 小时前
vibecoding起步注意点:插件、Skills、MCP、Hooks
服务器·数据库·python·oracle
我的xiaodoujiao16 小时前
API 接口自动化测试详细图文教程学习系列24--如何用Pytest去设计接口测试用例并执行
python·学习·测试工具·pytest
zhangfeng113316 小时前
ai 模型加密,强化版终极防盗方案 支持烧录的显卡列表
人工智能·pytorch·python