Python使用numpy对excel,csv文件进行操作

(基础题)根据“某门课程平时成绩和期末考试成绩.xlsx”内容,计算课程的平时成绩和期末考试成绩的均值、标准差、方差、最小值、最大值,输出期末考试成绩排名有进步学生的名单。

原表为在这里插入图片描述

首先将表的后缀改为csv,然后将该表以记事本的形式打开,然后另存为,将编码设置为UTF-8
在这里插入图片描述

程序代码:

import numpy as np
arr=np.array(np.loadtxt('C:/Users/hhx/Desktop/某门课程平时成绩和期末考试成绩.csv',dtype=float,delimiter=',',skiprows=1,usecols=1,encoding='utf-8'))
print("平时成绩总和: ",arr.sum())
print("平时成绩均值: ",arr.mean())
print("平时成绩标准差: ",arr.std())
print("平时成绩方差: ",arr.var())
print("平时成绩最小值: ",arr.min())
print("平时成绩最大值: ",arr.max())
arr2=np.array(np.loadtxt('C:/Users/hhx/Desktop/某门课程平时成绩和期末考试成绩.csv',dtype=float,delimiter=',',skiprows=1,usecols=2,encoding='utf-8'))
print("期末成绩总和: ",arr2.sum())
print("期末成绩均值: ",arr2.mean())
print("期末成绩标准差: ",arr2.std())
print("期末成绩方差: ",arr2.var())
print("期末成绩最小值: ",arr2.min())
print("期末成绩最大值: ",arr2.max())
sort_arr2=np.argsort(arr2,axis=0)
arr3=np.array(np.loadtxt('C:/Users/hhx/Desktop/某门课程平时成绩和期末考试成绩.csv',dtype=str,delimiter=',',skiprows=1,usecols=0,encoding='utf-8'))
ans=0
print("期末成绩排名有进步的名单为")
for i in range(len(arr2)):
    for j in range(len(arr2)):
        if(arr2[sort_arr2[i]]==arr2[j] and arr3[sort_arr2[i]]==arr3[j]):
            if(i>j):
                ans+=1
                print(arr3[i])
                break

argsort()是返回原数组从小到大后的索引,与原索引进行比较,当排序索引大于原索引即为进步名单,由于可能存在分数一样的情况,所以条件里多加个判断是否学生名字一样

下面的代码则是用另一种方式直接打开excel文件
程序代码:

import numpy as np
from xlrd import open_workbook
book=open_workbook(r'C:\Users\hhx\Desktop\某门课程平时成绩和期末考试成绩.xlsx')
sheet=book.sheets()[0]
arr=np.array([x.value for x in sheet.col(1,start_rowx=1)])
#print(arr)
print("平时成绩总和: ",arr.sum())
print("平时成绩均值: ",arr.mean())
print("平时成绩标准差: ",arr.std())
print("平时成绩方差: ",arr.var())
print("平时成绩最小值: ",arr.min())
print("平时成绩最大值: ",arr.max())
arr2=np.array([i.value for i in sheet.col(2,start_rowx=1)])
print("期末成绩总和: ",arr2.sum())
print("期末成绩均值: ",arr2.mean())
print("期末成绩标准差: ",arr2.std())
print("期末成绩方差: ",arr2.var())
print("期末成绩最小值: ",arr2.min())
print("期末成绩最大值: ",arr2.max())
sort_arr2=np.argsort(arr2,axis=0)
ans=0
arr3=np.array([i.value for i in sheet.col(0,start_rowx=1)])
print("期末成绩排名有进步的名单为")
for i in range(len(arr2)):
    for j in range(len(arr2)):
        if(arr2[sort_arr2[i]]==arr2[j] and arr3[sort_arr2[i]]==arr3[j]):
            if(i>j):
                ans+=1
                print(arr3[i])
                break

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值