鱼C论坛

 找回密码
 立即注册
查看: 1603|回复: 4

[已解决]python多条件筛选并计算excel数据编程求助

[复制链接]
发表于 2020-8-29 11:14:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我家有只小火锅 于 2020-8-29 11:15 编辑

1、想筛选出各班语文分数大于60、数学分数大于80、英语分数大于80的学生以及他的总分。
2、求出这些学生总分的平均分

3个sheet里分别对应3个班的数据


程序应该怎么编制啊?
我编了下面的程序,后续就不知道怎么编了

>>> from openpyxl import load_workbook
>>> wb = load_workbook(filename = r"G:\360MoveData\Users\Administrator\Desktop\test.xlsx")
>>> ws = wb["1班"]
>>> for row in ws.iter_cols(min_col=2, min_row=2, max_col=6, max_row=5):
        ws[row[3].coordinate] = '=IF(%s>60,1,2)' % (row[0].coordinate)
        ws[row[4].coordinate] = '=IF(%s>80,3,4)' % (row[1].coordinate)
        ws[row[5].coordinate] = '=IF(%s>80,5,6)' % (row[2].coordinate)
最佳答案
2020-8-29 12:39:51
我家有只小火锅 发表于 2020-8-29 12:34
请问这个论坛上有pandas的学习视频嘛

不想学pandas,openpyxl就只能这么写了,不过还是建议学一下,哔哩哔哩上找,会有很多视频,这个处理大量数据效率高
excel数据.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-29 12:05:44 | 显示全部楼层
数据处理,建议还是用pandas比较好吧,你要用openpyxl实现你上面的需求,估计要写好多代码
你可以试试这个
import pandas as pd

a=pd.read_excel('4.xlsx',sheet_name='1班')  #读取

a['总分']=a.loc[:,['语文','数学','英语']].sum(1)  #计算总分
a['平均分']=a.loc[:,['语文','数学','英语']].mean(1)  #计算平均值

b=a[a['语文']>60]  #按条件筛选
b=b[b['数学']>80]
b=b[b['英语']>80]
a.loc[b.index,'符合条件']='符合条件'  #筛选出符合条件的
print(a)

a.to_excel('result.xlsx',index=False)  #输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-29 12:34:02 | 显示全部楼层
疾风怪盗 发表于 2020-8-29 12:05
数据处理,建议还是用pandas比较好吧,你要用openpyxl实现你上面的需求,估计要写好多代码
你可以试试这个 ...

请问这个论坛上有pandas的学习视频嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 12:39:04 | 显示全部楼层
我家有只小火锅 发表于 2020-8-29 12:34
请问这个论坛上有pandas的学习视频嘛
from openpyxl import load_workbook

wb = load_workbook(filename="4.xlsx")
ws = wb["1班"]
for i in range(2, ws.max_row + 1):
    yuwen = int(ws['B' + str(i)].value)
    shuxue = int(ws['C' + str(i)].value)
    yingyu = int(ws['D' + str(i)].value)
    ws['E' + str(i)].value = yuwen + shuxue + yingyu
    ws['F' + str(i)].value = ws['E' + str(i)].value / 3
    if (yuwen>60) and (shuxue>80) and (yingyu>80):
        ws['G' + str(i)].value ='符合条件'
wb.save('result.xlsx')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-29 12:39:51 | 显示全部楼层    本楼为最佳答案   
我家有只小火锅 发表于 2020-8-29 12:34
请问这个论坛上有pandas的学习视频嘛

不想学pandas,openpyxl就只能这么写了,不过还是建议学一下,哔哩哔哩上找,会有很多视频,这个处理大量数据效率高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表