使用python

时间:2017-02-06 07:11:55

标签: python frequency

我想计算每个地址使用python在数据文件中出现的次数。 地址范围不固定,这意味着地址范围与每个数据文件不同。 最小值和最大值之间的某些地址根本不显示。 (第2栏是地址。)

为了有效地解决这个问题,我该如何处理? 我不知道哪个数据结构可以正常,哪个函数对它有帮助?

我只是尝试使用大数组索引表示地址。读取数据文件,加1到数组[地址]。这是糟糕的代码。

补充: 我尝试了pieces_write [1] .value_counts(),结果是

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

DATA FILE的示例(第二列是地址)

 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

数据文件读取代码

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 个答案:

答案 0 :(得分: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

答案 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