计算Python中列的单词频率

时间:2012-07-09 14:05:28

标签: python csv tabular

我有一个csv文件。 csv文件的结构是:

Name Hour Location
A    4    San Fransisco
B    2    New York
C    4    New York
D    7    Denton
E    8    Boston
F    1    Boston

如果你观察上面的数据,有

2 New York and
2 Boston

我尝试使用表格包。我尝试了表格包文档中提到的教程超过7个小时。但我完成了。

任何人都可以帮助我,如何使用Python提取位置列中该Csv文件中常用词的计数。

谢谢。

3 个答案:

答案 0 :(得分:9)

data = """Name\tHour\tLocation
A\t4\tSan Fransisco
B\t2\tNew York
C\t4\tNew York
D\t7\tDenton
E\t8\tBoston
F\t1\tBoston
"""

import csv
import StringIO
from collections import Counter


input_stream = StringIO.StringIO(data)
reader = csv.reader(input_stream, delimiter='\t')

reader.next() #skip header
cities = [row[2] for row in reader]

for (k,v) in Counter(cities).iteritems():
    print "%s appears %d times" % (k, v)

输出:

San Fransisco appears 1 times
Denton appears 1 times
New York appears 2 times
Boston appears 2 times

答案 1 :(得分:6)

不确定您要分隔的是什么,但示例显示为4个空格,因此这是一个解决方案。

如果您实际按标签分隔,请使用@MariaZverina的答案

import collections

with open('test.txt') as f:
    next(f) # Skip the first line
    print collections.Counter(line.rstrip().rpartition('    ')[-1] for line in f)

输出:

Counter({'New York': 2, 'Boston': 2, 'San Fransisco': 1, 'Denton': 1})

答案 2 :(得分:0)

如果文件不是太大,最天真的方式是:

  • 逐行阅读文件
  • 将位置值附加到列表
  • 从该列表构建一组唯一身份
  • 确定列表中每个唯一身份用户的计数