Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算csv中特定单词出现次数的Python算法_Python_Algorithm_Csv_Counting - Fatal编程技术网

计算csv中特定单词出现次数的Python算法

计算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('

我刚刚开始学习python。 我很好奇,除了简单地使用for循环逐行遍历和读取外,还有什么有效的方法来计算CSV文件中特定单词的出现次数

更具体地说,假设我有一个CSV文件包含两列,“名称”和“等级”,有数百万条记录

如何计算“等级”下出现的“A”

Python代码示例将不胜感激

基本示例,使用标准Python库中的and(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()
输出(对于小数据集):


当然,你应该阅读所有的成绩,在这种情况下,这也意味着阅读整个文件。您可以使用
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
可能会更快。但你总是可以自己用,看看约翰西韦伯的