Python TypeError:列表索引必须是整数,而不是元组

时间:2014-01-27 22:43:58

标签: python-2.7 csv numpy osx-mountain-lion

在osx lion上使用python 2.7 shell。 .csv文件有12列,892行。

import csv as csv
import numpy as np
# Open up csv file into a Python object
csv_file_object = csv.reader(open('/Users/scdavis6/Documents/Kaggle/train.csv', 'rb'))
header = csv_file_object.next()
data=[]
for row in csv_file_object:
    data.append(row)
    data = np.array(data)

# Convert to float for numerical calculations
number_passengers = np.size(data[0::,0].astype(np.float))

这是我得到的错误:

Traceback (most recent call last):
  File "pyshell#5>", line 1, in <module>
    number_passengers = np.size(data[0::,0].astype(np.float))
TypeError: list indices must be integers, not tuple 

我做错了什么。

1 个答案:

答案 0 :(得分:2)

不要使用csv将数据读入NumPy数组。使用numpy.genfromtxt;使用dtype=None会使genfromtxt对您的dtypes进行智能猜测。通过这种方式,您不必手动将字符串转换为浮点数。

data[0::, 0]只会为您提供data的第一列。 data[:, 0]会给你相同的结果。

错误消息

TypeError: list indices must be integers, not tuple 

表明由于某种原因,您的data变量可能持有列表而不是ndarray。例如,相同的Exception可以像这样产生:

In [73]: data = [1,2,3]

In [74]: data[1,2]
TypeError: list indices must be integers, not tuple

我不知道为什么会发生这种情况,但如果您发布了CSV示例,我们应该可以帮助解决这个问题。

使用np.genfromtxt,您当前的代码可以简化为:

import numpy as np
filename = '/Users/scdavis6/Documents/Kaggle/train.csv'
data = np.genfromtxt(filename, delimiter=',', skiprows=1, dtype=None)
number_passengers = np.size(data, axis=0)