计算csv中特定单词出现次数的Python算法
我刚刚开始学习python。 我很好奇,除了简单地使用for循环逐行遍历和读取外,还有什么有效的方法来计算CSV文件中特定单词的出现次数 更具体地说,假设我有一个CSV文件包含两列,“名称”和“等级”,有数百万条记录 如何计算“等级”下出现的“A” Python代码示例将不胜感激 基本示例,使用标准Python库中的and(Python 2.7+):计算csv中特定单词出现次数的Python算法,python,algorithm,csv,counting,Python,Algorithm,Csv,Counting,我刚刚开始学习python。 我很好奇,除了简单地使用for循环逐行遍历和读取外,还有什么有效的方法来计算CSV文件中特定单词的出现次数 更具体地说,假设我有一个CSV文件包含两列,“名称”和“等级”,有数百万条记录 如何计算“等级”下出现的“A” Python代码示例将不胜感激 基本示例,使用标准Python库中的and(Python 2.7+): import csv import collections grades = collections.Counter() with open('
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()
输出(对于小数据集):
当然,你应该阅读所有的成绩,在这种情况下,这也意味着阅读整个文件。您可以使用
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)
这相当快,我用计数器方法做得再好不过了:
from collections import Counter
grades = [rec[1] for rec in my_reader] # generator expression was actually slower
result = Counter(grades)
print(result)
from collections import Counter
grades = [rec[1] for rec in my_reader]
result = grades.count('A')
print(result)
最后但并非最不重要的一点是,列表有一个count
方法:
from collections import Counter
grades = [rec[1] for rec in my_reader] # generator expression was actually slower
result = Counter(grades)
print(result)
from collections import Counter
grades = [rec[1] for rec in my_reader]
result = grades.count('A')
print(result)
您必须读取整个文件,否则您的算法可能会被证明是错误的。一行一行地线性地阅读是一种不错的方法。importcsv;count=sum(csv.dictreader(open(filename))中的行为1,如果行['Grade']='A')
@agf:nice,但是当我尝试这个时,它比另一个慢了6-8倍answers@steabert速度系数几乎肯定不重要,但是您可以对文件行的第一个元素的生成器表达式应用计数器。谢谢!我接受了你的回答。但我想知道,与使用字典相比,使用grade作为键,occurrence作为值,哪种方法更有效?@laotanzhurou,Counter
是一个dict
子类,但它稍微慢一点。如果你真的需要加速,或者如果。。。计数+=1
可能会更快。但你总是可以自己用,看看约翰西韦伯的