Python алгоритм подсчета появления конкретного слова в csv - PullRequest
5 голосов
/ 12 февраля 2012

Я только начал изучать Python. Мне любопытно, каковы эффективные способы подсчета вхождения конкретного слова в файл CSV, кроме простого использования цикла for, чтобы проходить построчно и читать.

Если говорить более конкретно, допустим, у меня есть CSV-файл, содержащий два столбца: «Имя» и «Оценка» с миллионами записей.

Как можно посчитать вхождение "А" в "Оценка"?

Примеры кода Python будут с благодарностью!

Ответы [ 2 ]

9 голосов
/ 12 февраля 2012

Базовый пример с использованием csv и collections.Counter (Python 2.7+) из стандартной библиотеки Python:

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)]
2 голосов
/ 12 февраля 2012

Вы, конечно, должны прочитать все оценки, что в данном случае также означает чтение всего файла. Вы можете использовать модуль 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)
...