2017-04-06 74 views
3

我有一个CSV以下数据集文件比较单元值csv文件蟒

[1,1,1,2,2,2,2,3,3,3,1,1,2]

现在我想通过比较它们并将它们存储在数组中来计算每个值,但我不想要频率。因此,我的输出应该是这样的:

[3,4,3,2,1]

我的代码如下:

import csv 

with open("c:/Users/Niels/Desktop/test.csv", 'rb') as f: 
    reader = csv.reader(f, delimiter=';') 
    data = [] 

    for column in reader: 
     data.append(column[0]) 

    results = data 
    results = [int(i) for i in results] 
    print results 

    dataFiltered = [] 
    for i in results: 
     if i == (i+1): 
      counter = counter + 1 
      dataFiltered.append(counter) 
      counter = 0 
    print dataFiltered 

我的想法是通过比较单元值。我知道结果循环中有什么错误,但我无法弄清楚我的错误在哪里。我的想法是通过比较单元格值。也许

+1

'如果我==(我+ 1):'这是不可能发生的!你想检查前一个元素是否与下一个元素相同? –

+0

你为什么要做'结果=数据; results = [int(i)for i in results]'?为什么不只是'结果= [int(i)for i in data]'? –

回答

4

我不会进入你的循环是非常if i==(i+1):只是不能True对于初学者的细节。

接下来,你会用itertools.groupby更好,总结各组的长度:

import itertools 

results = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 1, 1, 2] 

freq = [len(list(v)) for _,v in itertools.groupby(results)] 

print(freq) 

len(list(v))使用list要强行将该分组的项目迭代,所以我们可以计算长度(也许sum(1 for x in v)会更好的性能/合适的,我没有坐在板凳上这两种方法)

我得到:

[3, 4, 3, 2, 1] 

旁白:读一个CSV文件的第一列,并将结果转换为整数,可以简单地通过来达到的:

results = [int(row[0]) for row in reader]