2014-01-15 17 views
0

第一列股份相同的值我有一個像下面csv文件。我希望Python獲得第一列中的單元格共享相同ID的第一個數字值。然後我想將ID和值存儲在另一個csv中。獲取從CSV第一個數值,所有在Python 2.7

編輯:實際的數據是在Excel中,但已被保存爲csv。這是該領域在excel中的樣子。 CSV以逗號分隔,不含標題。

id   days 
8215 \N 
8215 \N 
8215 700 
8215 578 
8215 1491 
8215 1400 
8215 486 
18150 \N 
18150 610 
18150 730 
18150 456 
18150 548 
18150 883 
30610 \N 
30610 792 
30610 518 

. 
. 

期望的結果:

8215 700 
18150 610 
30610 792 
. 
. 

這是我到目前爲止所。我希望它只在'\ N'後打印第一個數字值。不知何故,如果在第12列有兩行或更多行'\ N',它仍然會打印'\ N'。我還想用上面的例子來保存ID。

import csv 

with open('sg_cand.csv', 'rb') as csvfile: 
    csvReader = csv.reader(csvfile) 
    for row in csvReader: 
     if row[11] == '\N': 
      print csvReader.next()[11] 
+0

首先,你說「CSV」,當你調用'csv.reader'不指定一個分隔符,但我沒有看到任何逗號。該文件似乎是製表符分隔的,除了標題行,(不一致)似乎有空格。那是對的嗎? – DSM

+0

@DSM應該用逗號分割,我不你在你所說的文件看起來像上面貼東西在這個CSV – Cryssie

+0

看起來頭。沒有逗號,並且你有一個標題行:'id days'。這是你的真實文件的樣子嗎? – DSM

回答

1

使用set來跟蹤你已經記錄的值id值:

import csv 

with open('sg_cand.csv', 'rb') as csvfile: 
    csvReader = csv.reader(csvfile) 
    seen = set() 
    for row in csvReader: 
     if row[0] not in seen and row[11] != '\N': 
      seen.add(row[0]) 
      print row[0], row[11] 

這將打印任何row[11]值不等於\N,其ID(這裏假定爲在row[0])以前沒見過。

相關問題