python-openpyxl实战


任务需求

在表格中
每个考生下的同一个课目的同一个试卷类型的这些成绩为一组,编辑大于2个标准差和大于3个标准差的数值(加上平均值)
首先看一下长度
在这里插入图片描述在这里插入图片描述
emm 手动是不可能了,那就用python openpyxl来处理.


提示:以下是本篇文章正文内容,下面案例可供参考

前提条件

按四个标注, 以type来划分, 每一个学号的科目代码 type来划分
在这里插入图片描述

代码实现


import numpy
from openpyxl import Workbook
import openpyxl

f = openpyxl.load_workbook('task.xlsx', read_only=False)
sht = f.active

def gainStd():

    #print(sht.max_row,sht.max_column)
    std=[]
    avg=[]
    temp_count=[]
    pre=1
    for i,data in enumerate(sht.iter_rows()):
        if(i==0):
            continue
        #print(data[3].value)
        if(data[2].value!=pre):
            std.append(numpy.std(temp_count))
            avg.append(numpy.mean(temp_count))
            temp_count=[]
            temp_count.append(data[3].value)
        else:
            temp_count.append(data[3].value)
        pre = data[2].value
    std.append(numpy.std(temp_count))
    avg.append(numpy.mean(temp_count))
    return  std,avg

pre=1
std,avg= gainStd()


count=0
for i, data in enumerate(sht.iter_rows()):
    if (i == 0):
        continue
    if(data[2].value!=pre):
        count+=1
        if (data[3].value > avg[count]+2 * std[count]):
            sht.cell(i+1, 5).value = '✓'
        #处理中间值
        if(data[3].value>avg[count]+3*std[count]):
            sht.cell(i+1,6).value='✓'
    else:
        #处理过程值
        if(data[3].value>avg[count]+2*std[count]):
            sht.cell(i+1,5).value='✓'
        if(data[3].value>avg[count]+3*std[count]):
            sht.cell(i+1,6).value='✓'
    pre = data[2].value

f.save('pur.xlsx')


结果

可以看到:短短几秒python已经处理完成了,经过 测试
完成任务
挑一个贴上
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值