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))  #解决读取行索引出问题的情况

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值