在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
我做错了什么。
答案 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)