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

请问怎么通过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日

悬赏问题

  • ¥40 单片机实验录制讲解视频
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader
  • ¥45 谷歌浏览器出现开发者工具无法显示已创建的,但您可以调试已部署的代码。 状态代码 404, net::ERR HTTP RESPONSE CODE FAILURE
  • ¥15 如何解决蓝牙通话音频突发失真问题