计算Python中列的单词频率

use*_*629 2 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
Run Code Online (Sandbox Code Playgroud)

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

2 New York and
2 Boston
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Mar*_*ina 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)
Run Code Online (Sandbox Code Playgroud)

输出:

San Fransisco appears 1 times
Denton appears 1 times
New York appears 2 times
Boston appears 2 times
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 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)
Run Code Online (Sandbox Code Playgroud)

输出:

Counter({'New York': 2, 'Boston': 2, 'San Fransisco': 1, 'Denton': 1})
Run Code Online (Sandbox Code Playgroud)