2017-05-04 98 views
0

fvecs = []類型錯誤:列表索引必須是整數或片,而不是元組

for line in open(filename): 
    stats = line.split(',') 
    labels.append(int(stats[0])) 
    fvecs.append([float(x) for x in stats[5,6,12,27,29,37,39,41]]) 

我有一個很大的CSV文件。文件,我用作包含43列和數百行的數據集,我試圖提取特定的列作爲單獨的記錄,我似乎無法解決這個問題。該錯誤是由最後一行代碼引起的,並在標題中產生了錯誤消息,當範圍設置爲時,它可以很好地工作,例如stats [30:38]。

我已經嘗試將所需的列存儲在單獨的數組中,並將它稱爲stats [requiredcolumns],但這會產生相同的錯誤。

我已經考慮過使用熊貓,但這只是一個很大的程序中的一小部分代碼,所有功能都正確,並且大熊貓的實現需要對整個程序進行徹底檢修,這是由於時間原因而不可能實現的限制。

任何幫助,將不勝感激

+0

'stats'只是一個列表,而不是一個Numpy數組。作爲一個列表,它不支持Numpy的高級索引功能。如果統計數據中的所有項都是數字,則可以在嘗試高級索引之前先將其轉換爲Numpy數組。即使如此,您用於索引的語法也不會像這樣工作。 – blubberdiblub

+0

不幸的是,他們並不是所有的數字,所以你不認爲這將工作在目前的方式? –

回答

0

如果你有幾列,你可以試試這個:

for line in open(filename): 
    stats = line.split(',') 
    labels.append(int(stats[0])) 
    fvecs.append([float(x) for x in stats[5],stats[6],stats[12],stats[27], stats[29], stats[37], stats[39], stats[41]]) 

該代碼將返回一個列表的列表;否則,第一個評論是正確的索引和NumpPy。

+1

'indices = [5,6,12,27,29,37,39,41]; fvecs.append([float(stats [index])用於index中的索引])'會爲您節省大量的輸入,並且更容易擴展到任意多列。 – Jaime

+0

工作正常!非常感謝!! @ titiro89 –

相關問題