栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 【问题描述】根据csv文件中记录的各科成绩,统计大学英语成绩在80-90分之间的学生人数。

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 【问题描述】根据csv文件中记录的各科成绩,统计大学英语成绩在80-90分之间的学生人数。

【问题描述】根据csv文件中记录的各科成绩,统计大学英语成绩在80-90分之间的学生人数。
【输入形式】csv文件
【输出形式】txt文件
【样例输入】

【样例说明】
【评分标准】
题意主要是判断英语成绩是否在range(80,90)这个范围,对Dataframe二维数组切片判断统计即可

import  pandas  as  pd

if  __name__  ==  '__main__':
	open('summary.txt','w').write(str(len([x for x in pd.read_csv('scores.csv')['大学英语'] if x in range(80,91)])))  #无关闭IO流,不建议

上面代码并没有关闭文件IO流,不建议,当然可以用上下文管理器,应该也可以使用pandas 的写入操作

import  pandas  as  pd

if  __name__  ==  '__main__':	
	[x.write(str(len([x for x in pd.read_csv('scores.csv')['大学英语'] if x in range(80,91)]))) and x.close() for x in [open('summary.txt','w')]]     #可以关闭文件流

上面可以关闭文件流,尝试用.closed来判断

print(f.closed)

而pandas判断范围是使用df.between(left,right,inclusive=[True,False])即可判断指定的范围(注意,是输出一个只有True和False的数组),默认inclusive=True为左右开区间,False为左右闭区间,一下我并没有使用between,可以这样:print(data[‘大学英语’].between(80,90).sum()),因为sum()函数默认会统计非假的元素的个数,比如print(sum([True,True,False]))为2,故而这就输出个数了,具体如下,没有粘贴代码,因为不确定线上测试是否正确:

忽然发现还是可以用pandas的写入函数来解决,只要熟悉并用好参数(to_csv(‘summary.txt’,header=None,index=None,sep=’ ',mode=‘w’))就能写入一个字符串啦,代码如下:

import  pandas  as  pd

if  __name__  ==  '__main__':	
	pd.Series([pd.read_csv('scores.csv')['大学英语'].between(80,90).sum()]).to_csv('summary.txt',header=None,index=None,sep=' ',mode='w')

在写入csv文件时出现再读取增加多一无名列的问题:
原来写入时是这样:

再读取:

我所想到的解决方案就是读取时改变读取起始,使用index_col=0参数:

print(pd.read_csv('scores.csv',index_col=0))  #解决读取行索引出问题的情况

当然,以上还是没有解决源文件的问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号