我刚刚开始学习python。我很好奇在 CSV 文件中计算特定单词出现次数的有效方法是什么,而不是简单地使用 for 循环逐行遍历并读取。
更具体地说,假设我有一个包含两列“名称”和“等级”的 CSV 文件,其中包含数百万条记录。
如何计算“等级”下出现“A”的次数?
Python 代码示例将不胜感激!
基本示例,使用标准 Python 库中的csv
和collections.Counter
(Python 2.7+):
import csv
import collections
grades = collections.Counter()
with open('file.csv') as input_file:
for row in csv.reader(input_file, delimiter=';'):
grades[row[1]] += 1
print 'Number of A grades: %s' % grades['A']
print grades.most_common()
输出(对于小数据集):
Number of A grades: 2055
[('A', 2055), ('B', 2034), ('D', 1995), ('E', 1977), ('C', 1939)]
您当然应该阅读所有成绩,在这种情况下也意味着阅读整个文件。您可以使用该csv
模块轻松读取逗号分隔值文件:
import csv
my_reader = csv.reader(open('my_file.csv'))
ctr = 0
for record in my_reader:
if record[1] == 'A':
ctr += 1
print(ctr)
这是相当快的,我不能用这个Counter
方法做得更好:
from collections import Counter
grades = [rec[1] for rec in my_reader] # generator expression was actually slower
result = Counter(grades)
print(result)
最后但并非最不重要的一点是,列表有一个count
方法:
from collections import Counter
grades = [rec[1] for rec in my_reader]
result = grades.count('A')
print(result)