2017-04-06 78 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]