Python算法统计CSV中特定单词出现次数
我刚开始学习Python。
我很好奇,除了简单地用循环一行一行地读取之外,还有什么高效的方法可以统计CSV文件中特定单词的出现次数。
更具体一点,假设我有一个CSV文件,里面有两列,“姓名”和“成绩”,总共有几百万条记录。
那么,怎么才能统计“成绩”这一列中“A”的出现次数呢?
如果能提供一些Python代码示例,那就太好了!
2 个回答
3
当然,你应该读取所有的成绩,这在这个情况下也意味着要读取整个文件。你可以使用 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)
12
这是一个基本的例子,使用了csv
和collections.Counter
这两个工具,它们都是Python标准库里的内容,适用于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)]