2016-11-03 4 views
0
import csv 

data = {} 
f = open("train.csv") 
csv_f = csv.reader(f) 
labels = next(csv_f) 
for i in range(len(labels-1)): 
    a = [] 
    for row in csv_f: 
     a += row[i] 
    data [labels[i]] = a 

をスキップし、ループのために入れ子になった私は、CSVファイルを読み込むとのARRAなどのラベルと第二部としての第1の部分と辞書に列を入れしようとしている上記のコードをしています値。これは、私のデータセットのために 'ID'ですが、その後に動作を停止する私の最初の列では、a配列を空白のままにしてしまいます。私はいくつかのデバッグを行い、内側のループの外側のforループを実行していることがわかりましたが、外側のforループを2回実行すると、内側のforループをスキップしました。それは後のすべてのものに対してもそれをしました。のPython 3:ネストされたループ

なぜですか?

コードを修正して停止させるにはどうすればよいですか?

+0

各ループの機能を理解していますか? –

+1

[Python csv.readerの重複可能性:ファイルの先頭に戻るにはどうすればいいですか?](http://stackoverflow.com/questions/431752/python-csv-reader-how-do-i-return-to -the-the-top-of-the-file) – Kevin

+0

説明が明確でないため、 'train.csv'の内容の例と出力として何を望みますか? – EvensF

答えて

0

Kevinが言ったように、問題は、csv_fを使った最初の繰り返しの後に、csvリーダーをファイルの先頭に戻す必要があるということだと思います。このアルゴリズムでは、ファイル全体を何度も解析してすべてのデータを収集する必要があります。より効率的なアルゴリズムでは、行ごとにファイルを解析します。私はこのコードをチェックしていないので、100%ではないかもしれませんが、うまくいけば正しい方向にあなたを指しています。

import csv 

data = {} 
f = open("train.csv") 
csv_f = csv.reader(f) 

isLabelRow = True 

for row in csv_f: 
    print "Processing row : " + str(row) 
    if isLabelRow: 
     # Get labels from first row of data 
     labels = [] 
     isLabelRow = False 

     # Initialize data "columns" 
     for label in row: 
      print "Processing label : " + label 
      labels.append(label) 
      data[label] = [] # empty array 

    else: 
     # Add each item in the row to the appropriate "column" in data 
     for i in range(len(row)): 
      data[labels[i]].append(row[i]) 
関連する問題