我想计算每个地址使用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
答案 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