Python算法统计CSV中特定单词出现次数

7 投票
2 回答
22588 浏览
提问于 2025-04-17 12:53

我刚开始学习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

这是一个基本的例子,使用了csvcollections.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)]

撰写回答