2017-04-06 13 views
3

値Iは、CSVで次のデータセットを有する比較細胞は、CSVファイルのpython

ファイル[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 

私の考えは、セルの値を比較していました。私は結果のforループに何かが間違っていることを知っていますが、私のミスがどこにあるのか分かりません。私の考えは、細胞の値を比較することでした。私は非常に間違っている、あなたのループの詳細には触れませんたぶん

+1

'I ==場合(I + 1):'それが起こることはできません!前の要素が次の要素と同じかどうかチェックしますか? –

+0

なぜあなたは 'results = data;結果= [結果のiのint(i)] '?どうして '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ファイルの最初の列を読み取り、整数に結果を変換することは、単純でacheivedすることができます。

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