python - 无法连续计算实例数
问题描述
您好,我正在创建一个评分系统,该系统会打开一个 .csv 文件并列出学生名单,计算他们每个人的通过次数、成绩和荣誉。
样本数据
First Name, Last Name, Test 1, Test 2, Test 3
John, Doe, P, P, M
Mary, Jane, P, D, M
Bruce, Wayne, P, M, D
所以约翰将有 2 次传球,1 次功绩。Mary 1 of each etc. 这是我正在处理的代码。不幸的是,它是垂直计算成绩,所以 row[1] 是 3 次通过, row[2] 是 1 等,而不是水平读取。有谁知道如何解决这一问题?
import csv
import collections
#Create Counter
grades = collections.Counter()
#Open file and read
with open('Results.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:
grades[row[2]] += 1
print('Number of Pass grades: %s' % grades['P'])
print('Number of Merit grades: %s' % grades['M'])
print('Number of Distinction grades: %s' % grades['D'])
解决方案
您可以计算每一行的通行证、优点和区别。list.count()
然后使用方法(list.count 上的详细信息)将每条记录的通过次数、优点和区别分别添加到列表中。
input_data.csv
:
First Name,Last Name,Test1,Test2,Test3
John,Doe,P,P,M
Mary,Jane,P,D,M
Bruce,Wayne,P,M,D
code.py
:
import csv
with open("input_data.csv") as csv_file:
csv_reader = csv.reader(csv_file)
result = []
header_column = True
for data in csv_reader:
if header_column:
header_column = False
continue
row = data[:]
row.append(data[2:].count("P"))
row.append(data[2:].count("M"))
row.append(data[2:].count("D"))
result.append(row)
print(result)
输出:
[['John', 'Doe', 'P', 'P', 'M', 2, 1, 0], ['Mary', 'Jane', 'P', 'D', 'M', 1, 1, 1], ['Bruce', 'Wayne', 'P', 'M', 'D', 1, 1, 1]]
解释:
- 我们跳过列表中的第一行,
result
因为它包含标题信息。 - 这
result
是一个 2D 列表,其中每个内部列表按顺序包含以下信息:[First name
,Last Name
,Test1
,Test2
,Test3
,Number of passes
,Number of merits
,Number of distinctions
] - 这里
data[2:]
确保我们不计算P
,M
或列中的D
值。First Name
Last Name
替代解决方案:
- 我们可以使用
csv.DictReader
将每条记录作为字典。
参考:
推荐阅读
- android - 在Android中离线存储json数据?
- amazon-web-services - aws 配置:安全组 ID 和名称不匹配
- r - 使用 ggplot2 和 cowplot 组合绘图和重叠 geom_rect 对象
- java - 这段代码中 Integer.Min_value 的用途是什么?
- node.js - GSI 中使用 FilterExpression 的 DynamoDB 查询
- c++ - 如何使用迭代器在 C++ 中的递归函数中传递值?
- python - 无法用尽我的刮板中使用的所有相同 url 的内容
- sql - 展平 RDD 中的嵌套元组
- jsf - WebLogic 12.2 + primefaces 部署期间出现严重错误
- javascript - IE 11 中的 JS 错误