2015-05-12 31 views
0

我有一個CSV文件,需要刪除或只是跳過或用0替換一些缺失的數據,在列表中表示爲None。 CSV文件中的Row1 = [1, 2, 3, 4, none, 5, 6, 7, 8, 9]row2 = [1, 2, 3, 4, 5, 6, none, 7, 8, 9]刪除或跳過列表中的項目

counter=0 

for lines in csv: 

    list_all=lines.split(',') 
    list_all=lines.strip() 
    counter+=1 
    for ch in range(len(list_all)): 
     if list_all[ch]=='?': 
      list_all.replace('?',0) 
    list_0=float(list_all[0]) 
    list0.append(list_0) 
    avelist0=(sum(list0)/counter) 

我需要得到每列的所有值的總和;當然不包括None。我不斷收到一個錯誤:

TypeError: Can't convert 'int' object to str implicitly. 

我還是新來的Python,我想用for循環,如果能夠做到這一點。我無法使用列表解析。

因此第二個列表的第一個列表的平均值應該是22.522.5

+0

你需要用字符串「0」替換「?」,而不是數字「0」。 – TigerhawkT3

+1

請注意,您將得到不同的平均值來跳過'None',而不是將它們替換爲零... – jonrsharpe

+0

問題是隻替換第一個而不是全部 –

回答

1

因爲你不能使用列表解析,你想做的事是map在名單:

l = [1,2,3,4,None,5,6,7,8,9] 
new_l = map(lambda x: 0 if x.lower().strip() == 'none' else int(x), l) 
print new_l # [1, 2, 3, 4, 0, 5, 6, 7, 8, 9] 

然後如果你想總結整個列表,使用sum

sum(new_l) # returns 45 
+0

我無法使用lamba,因爲我必須將csv的每一列添加在一起。地圖會很好,但我還沒有在課堂上使用過,所以我無法使用它。 –

+0

問題在於CSV文件是以字符串的形式讀入的,所以在這樣的解決方案工作之前,他們需要額外的處理。 – TigerhawkT3

+0

@DavidJorgenson - 「map」只是一個讓所有數值爲數字的中間步驟。然後你可以簡單地通過'sum'函數來運行它。看看更新的答案。 –