计算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文件中的频繁词的计数。
谢谢。
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
谢谢你的答案。 – user907629 2012-07-09 14:17:45
+1虽然我会有'计数器(行[2]读取器中的行'),因此它不会遍历城市两次并创建中间列表。 – jamylak 2012-07-09 14:31:57
如果您使用python 2.7及以上版本,您可能需要注意“iteritems”更改为“items”。永远不会少,这将有同样的结果。 – Jiraheta 2016-07-11 19:21:14
不知道你在隔开什么,但例子显示为4个空格,所以这是一个解决方案。
Counter({'New York': 2, 'Boston': 2, 'San Fransisco': 1, 'Denton': 1})
感谢您的回复。就像我刚才提到的那样,即使您使用了txt文件而不是csv文件,这也给了我一个想法。 – user907629 2012-07-09 14:16:43
@ user907629对,我只是将你在那里的东西复制到'.txt'中。你的文件没有一个好的结构,所以你可能想用一个更传统的文件,比如实际的逗号分隔值。编辑:只是意识到他们是标签,但他们似乎已经出来作为空间或至少我认为这样 – jamylak 2012-07-09 14:18:19
如果文件ISN”太大了,最天真的方式会是:
- 逐行读取文件中的行
- 追加为位置值列表
- 建立一套唯一身份从该列表
- 确定每个不重复计数列表
@gddc我试着使用软件包表格。 – user907629 2012-07-09 14:09:34
@robert,是的,我在前面提到了纽约的两个人。 – user907629 2012-07-09 14:11:13