2017-02-06 56 views
-2

我想使用python來計算每個地址在數據文件中出現的次數。 地址範圍不固定,這意味着地址範圍與每個數據文件不同。 min和max之間的一些地址根本不出現。 (第二列是地址)使用python計算每個地址在數據文件中出現的次數

爲了有效地解決這個問題,我該如何處理? 我不知道哪個數據結構是可以的,哪個函數對它有幫助?

我只是試圖用大數組的哪個索引來表示地址。讀取數據文件並加1到數組[地址]。這是糟糕的代碼。

加了: 我試圖pieces_write [1] .value_counts(),結果是數據文件的

print(pieces_write[1].value_counts()) 
AttributeError: 'list' object has no attribute 'value_counts' 

實施例(第2列是地址)

0  303567  3584  Write  0.000000 
1  55590  3072  Write  0.000000 
0  303574  3584  Write  0.026214 
1  240840  3072  Write  0.026214 
1  55596  3072  Read  0.078643 
0  303581  3584  Write  0.117964 
1  55596  3072  Write  0.117964 
0  303588  3584  Write  0.530841 
1  55596  3072  Write  0.530841 
0  303595  3584  Write  0.550502 
1  240840  3072  Write  0.550502 
1  55602  3072  Read  0.602931 
0  303602  3584  Write  0.648806 
1  55602  3072  Write  0.648806 
0  303609  3584  Write  0.910950 
1  55602  3072  Write  0.910950 
0  303616  3584  Write  0.930611 
1  240840  3072  Write  0.930611 
1  55608  3072  Read  0.983040 
0  303623  3584  Write  1.028915 
1  55608  3072  Write  1.028915 
0  303630  3584  Write  1.330380 
1  55608  3072  Write  1.330380 

CODE爲數據文件閱讀

for line in open(datafile): 
    line_data = line.split() 
    if int(line_data[1]) < 6000000: 
     if line_data[3] == 'Read': 
      pieces_read.append(line_data) 
      x_read.append(count) 
     else: 
      pieces_write.append(line_data) 
      x_write.append(count) 
     x_tot.append(count) 
     pieces_tot.append(line_data) 
     count += 1 
+2

你嘗試過什麼已經實現?代碼有任何特定問題嗎? – yeputons

+1

['collections.Counter'](https://docs.python.org/2/library/collections.html#collections.Counter) –

+0

@yeputons我添加更多描述。 – WKK

回答

1

你可以使用collections.Counter:

from collections import Counter 

words = [] 

for line in open('data.txt'): 
    # Your logic here 
    words.append(line.split()[1]) 

words_dict = Counter(words) 

for key, value in words_dict.items(): 
    print(key, value) 

輸出:

303574 1 
55596 3 
303630 1 
303567 1 
303595 1 
303616 1 
240840 3 
303588 1 
55590 1 
303623 1 
303602 1 
303581 1 
55608 3 
303609 1 
0

IIUC,你可以像熊貓這樣做:

import pandas as pd 

df = pd.read_csv('Data_File_Path', sep='\s+', header=None, usecols=[1]) 
df[ df[1] < 6000000 ][1].value_counts() 

輸出:

55608  3 
55602  3 
55596  3 
240840 3 
303581 1 
303609 1 
303574 1 
303567 1 
303630 1 
303595 1 
303623 1 
55590  1 
303588 1 
303602 1 
303616 1 
Name: 1, dtype: int64 
+0

我讀取數據文件並存儲它或列表。 – WKK

+0

@WKK你想在文件中記下計數嗎? – MYGz

相關問題