Numpy学习记录

把numpy和openpyxl结合起来,进行数据操作练习。

1.数据表格:

 2.练习代码

import openpyxl
import numpy as np

# 1. openpyxl操作:读取数据、
wb=openpyxl.load_workbook(r'd:/Python Code/03  numpy pandas/学员成绩表.xlsx',data_only=True)
ws=wb.worksheets[0]
list1=list(ws.values)
# 2-1. np操作:自定义复合类型
# 注:如果不定义复合类型,data的结构为[[]……];自定义后,为[()……]
data=np.array(list1[1:],dtype={
    "names":["学员编号","姓名","C语言","高等数学","逻辑学","英语","算法基础"],
    "formats":["U7","U4","i","i","i","i","i"]})
# 2-2. 统计每列信息
ID=data["学员编号"]
Name=data["姓名"]
CPL=data["C语言"]
Maths=data["高等数学"]
Logic=data["逻辑学"]
English=data["英语"]
Algorithm=data["算法基础"]

# 2-3. 分别计算CPL的总分、平均分、最高分、最低分
print("CPl学科总分:",np.sum(CPL))
print("CPl学科平均分:","%.2f"%np.average(CPL))
print("CPl学科最高分:",np.max(CPL))
print("CPl学科最低分:",np.min(CPL))

# 2-4. 条件查询"names"字段信息、特定分值人员、特定人员
print("英语学科:",English)  # 或者:data["英语"]
print([list(r)[1:] for r in data[Logic>=eval(input(("查询逻辑学()以上分值学员:")))]])
print(data[Name==input("输入待查询学员姓名:")])

# 2-5. 各科成绩排序
# sort()函数方法  --->注:axis = 1 按行排序, axis = 0 按列排序)
rank1=np.array([CPL,Maths,Logic,English,Algorithm])
print("各科排名(倒序):","\n",np.sort(rank1,axis=1))  # 顺序如何操作,还没研究出来
# sorted()函数方法
rank2=sorted(data,key=lambda x: x[2]+x[3]+x[4]+x[5]+x[6],reverse=True)
print("总分排名:","\n",np.array(rank2))

3.运行结果

C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe "D:/Python Code/03  numpy pandas/Numpy布尔索引掩码操作.py"
CPl学科总分: 1049
CPl学科平均分: 74.93
CPl学科最高分: 98
CPl学科最低分: 62
英语学科: [63 92 97 84 82 73 80 67 68 84 85 80 82 67]
查询逻辑学()以上分值学员:90
[['张三', 78, 87, 97, 63, 91], ['阿七', 98, 97, 92, 82, 82], ['黄九', 73, 64, 91, 80, 99]]
输入待查询学员姓名:王五
[('2022003', '王五', 62, 77, 74, 97, 66)]
各科排名(倒序): 
 [[62 62 62 64 64 70 73 76 78 82 83 87 88 98]
 [64 69 77 78 79 85 87 87 91 91 93 96 96 97]
 [64 67 67 68 74 77 79 80 84 87 88 91 92 97]
 [63 67 67 68 73 80 80 82 82 84 84 85 92 97]
 [66 67 68 70 72 77 77 82 82 91 91 95 96 99]]
总分排名: 
 [('2022005', '阿七', 98, 97, 92, 82, 82)
 ('2022002', '李四', 83, 96, 88, 92, 67)
 ('2022001', '张三', 78, 87, 97, 63, 91)
 ('2022010', '龚十二', 76, 87, 68, 84, 95)
 ('2022007', '黄九', 73, 64, 91, 80, 99)
 ('2022013', '前十五', 62, 91, 80, 82, 82)
 ('2022014', '后十六', 64, 93, 77, 67, 91)
 ('2022011', '左十三', 62, 78, 87, 85, 77)
 ('2022012', '右十四', 88, 69, 84, 80, 68)
 ('2022004', '赵六', 70, 96, 67, 84, 70)
 ('2022006', '鲍八', 82, 79, 79, 73, 72)
 ('2022008', '易十', 64, 91, 67, 67, 96)
 ('2022009', '雷十一', 87, 85, 64, 68, 77)
 ('2022003', '王五', 62, 77, 74, 97, 66)]

进程已结束,退出代码0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值