类型错误:列表索引必须是整数或片,而不是元组

问题描述:

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

不幸的是,他们并不是所有的数字,所以你不认为这将工作在目前的方式? –

如果你有几列,你可以试试这个:

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 –