计算Python中列的单词频率

问题描述:

我有一个csv文件。 csv文件的结构是:计算Python中列的单词频率

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文件中的频繁词的计数。

谢谢。

+0

@gddc我试着使用软件包表格。 – user907629 2012-07-09 14:09:34

+0

@robert,是的,我在前面提到了纽约的两个人。 – user907629 2012-07-09 14:11:13

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) 

输出:

如果你确实是通过分离选项卡通过@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) 

输出使用应答

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

谢谢你的答案。 – user907629 2012-07-09 14:17:45

+0

+1虽然我会有'计数器(行[2]读取器中的行'),因此它不会遍历城市两次并创建中间列表。 – jamylak 2012-07-09 14:31:57

+0

如果您使用python 2.7及以上版本,您可能需要注意“iteritems”更改为“items”。永远不会少,这将有同样的结果。 – Jiraheta 2016-07-11 19:21:14

不知道你在隔开什么,但例子显示为4个空格,所以这是一个解决方案。

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

感谢您的回复。就像我刚才提到的那样,即使您使用了txt文件而不是csv文件,这也给了我一个想法。 – user907629 2012-07-09 14:16:43

+1

@ user907629对,我只是将你在那里的东西复制到'.txt'中。你的文件没有一个好的结构,所以你可能想用一个更传统的文件,比如实际的逗号分隔值。编辑:只是意识到他们是标签,但他们似乎已经出来作为空间或至少我认为这样 – jamylak 2012-07-09 14:18:19

如果文件ISN”太大了,最天真的方式会是:

  • 逐行读取文件中的行
  • 追加为位置值列表
  • 建立一套唯一身份从该列表
  • 确定每个不重复计数列表