Pythonを学び始めたところです。forループを使用して行ごとに読み取りを行う以外に、CSVファイル内の特定の単語の出現をカウントする効率的な方法について知りたいです。
具体的には、CSVファイルに「Name」と「Grade」の2つの列があり、数百万のレコードがあるとします。
「Grade」の下の「A」の出現をどのように数えますか?
Pythonコードサンプルをいただければ幸いです。
基本的な例、標準のPythonライブラリcsv
のand collections.Counter
(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)]
もちろん、すべての成績を読む必要があります。この場合は、ファイル全体を読むことも意味します。モジュールを使用して、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)