import pandas as pd
from openpyxl import load_workbook
def get_and_save_data_new(file_path):
“”” 只需更改文件名,就能自动处理完成所有操作
获取数据,处理数据,保存数据
保存的工作簿有:全级、1-8班、9班、全级describe分析
“””
# step0: 数据表列名准备
base_col = [‘班别’,’班级’,’姓名’,’语文’,’数学’,’英语’,’历史’,’道法’,’地理’,’生物’,’物理’,’化学’,’体育’]
# step1: 读取总表,求总分
data_col = pd.read_excel(file_path,sheet_name=’数据’).columns.tolist()
data_col = sorted(list(set(base_col) & set(data_col)),key=data_col.index) # 算出表格中需要用到的列名。** 用到了列表去重后还是以前列表顺序的方法
df = pd.read_excel(file_path, sheet_name=’数据’)[data_col]
df[‘总分’] = df.sum(axis=1,numeric_only=True) # 求每个人的总分
# step3: 级排
for subj in df.columns[df.columns.tolist().index(‘语文’):]: # 从df列名的语文开始往后处理各科及总分
insert_col = df.columns.tolist().index(subj) + 1
df.insert(insert_col, subj+’级排’, df[subj].rank(method=’dense’, axis=0))
# step4: 判定B+
describe = df.describe(percentiles=[0.2, 0.4, 0.6, 0.8]).round(2) # 对全级进行describe分析,B+对应的是40%这个成绩
B_pluss = describe.loc[‘40%’,’语文’::2] # 抽取各科及总分级排B+的分数值
# print(B_pluss)
def judge_b_p(score,b_pluss_value):
“”” 判定B+ “””
if score >= b_pluss_value:
return ‘B+’
else:return ”
# 将B+等级添加到工作表
for subj in B_pluss.index:
tem = df[subj].apply(judge_b_p,args=(B_pluss[subj],)) # 调用函数时,第二个参数只能是元组
insert_col = df.columns.tolist().index(subj) +2
df.insert(insert_col,subj+’B+’,tem)
# step5: 分离并保存9班与其他班数据
class1to8_df = df[df[‘班别’] != 9] # 分出1-8班数据
class9_df = df[df[‘班别’] == 9] # 分出9班数据
# 准备添加到工作簿中,以新的工作表保存
writer = pd.ExcelWriter(path=file_path, mode=’a’, engine=’openpyxl’)
book = load_workbook(filename=file_path)
writer.book = book
df.to_excel(writer, sheet_name=’全级整理后数据’, index=False) # 保存处理后的全级数据
class1to8_df.to_excel(writer, sheet_name=’1-8班成绩’, index=False) # 保存1-8班学生数据
class9_df.to_excel(writer, sheet_name=’9班成绩’, index=False) # 保存9班学生数据
describe.to_excel(writer, sheet_name=’全级describe分析’, index=False) # 保存describe分析数据
writer.save()
writer.close()
print(‘ …成绩表分析整理完成… ‘)
return B_pluss # 返回各科及总分B+分值
def manage_df():
“”” 提取原数据,处理分析后,以工作表形式添加在工作簿中 “””
file_path = r’\192.168.1.249临时文件 4教师XX创新班资料全级历次成绩/【第10周】2022-2023学年上学期初一期中水平测试成绩统计(公布).xlsx’
get_and_save_data_new(file_path) # 傻瓜式使用,完全自动化
if __name__ == ‘__main__’:
manage_df()
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!