2012-07-09 209 views
2

我有一個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

回答

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) 

輸出:

如果你確實是通過分離選項卡通過@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

6

不知道你在隔開什麼,但例子顯示爲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

0

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

  • 逐行讀取文件中的行
  • 追加爲位置值列表
  • 建立一套唯一身份從該列表
  • 確定每個不重複計數列表