m0_63539729 2022-04-29 11:16 采纳率: 87.5%
浏览 237
已结题

请问怎么通过Python openpyxl模块把Excel成绩一列按百分比排名设置等级?

请问怎么通过Python openpyxl模块把Excel成绩一列前30%的分数(向上取整)设置为优,后30%的分数(向下取整)设置为一般,剩余的分数设置为良呢?

img


前百分之几这个我没找到相关的代码。向上/向下取整我查到的基本是四舍五入型的取整,但是表格中的分数都是整数啊,向上/向下取整有什么意义吗?求解,非常谢谢!

  • 写回答

2条回答 默认 最新

  • 唐僧骑马噔了个噔 2022-04-29 15:29
    关注
    
    # 大概思路:
    # 1. 获取所有分数的列表  2. 去掉重复项的分数然后降序排序  3. 查找 前后30%的分数临界值  4.对比临界值修改Excel,并保存
    # 前后30%的分数临界值是主要逻辑
    >>> import openpyxl
    >>> import math
    >>> wb = openpyxl.load_workbook("F:/MyPython/score.xlsx")
    >>> sheet = wb.active
    >>> max_row = sheet.max_row
    >>> scores = [ sheet.cell(row,3).value for row in range(5,max_row+1)]   # 获取所有分数的列表
    >>> scores = list(map(lambda x: 0 if x is None else x,scores))    # 如果成绩列没有填写 就按0处理
    >>> score_list = list(set(scores))       # 去掉重复分数后的列表
    >>> score_list.sort(reverse=True)      # 列表 从分数高到低排序
    >>> topPercent30 = math.ceil(len(score_list)*0.3)  # 前30%的分数序号
    >>> topPercent30 = score_list[topPercent30-1]     # 前30%的分数值
    >>> lastPercent30 = int(len(score_list)*0.7)        # 后30%的分数序号
    >>> lastPercent30 = score_list[lastPercent30-1]    # 后30%的分数值
    >>> for cell in sheet.iter_rows(min_row=5,min_col=3,max_col=4):
                socre = cell[0].value
                if socre is None or socre<=lastPercent30:
                    cell[1].value = "一般"
                elif socre>=topPercent30:
                    cell[1].value = "优"
                else:
                    cell[1].value = "良"
    >>> wb.save(filename="F:/MyPython/score_grade.xlsx")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月29日

悬赏问题

  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))