IndexError:Python上的索引太多了

时间:2014-01-17 06:58:39

标签: python-2.7 numpy pydev osx-mountain-lion kaggle

在OSX上使用PyDev和Python 2.7的eclipse环境。尝试计算数组中的元素并总结数组中的元素。获取索引错误。

import numpy as np
import os
import sys

csv_file_object = fileName = os.path.join('train.csv')
print('Directory separator on your platform ({}): {}'.format(sys.platform, os.sep))

data=[]
for row in csv_file_object:
    data.append(row)
data = np.array(data)

number_passengers = np.size(data[0::,0].astype(np.float))
number_survived = np.sum(data[0::,0].astype(np.float))
proportion_survivors = number_survived / number_passengers

Traceback (most recent call last):
  File "/Users/scdavis6/Documents/Kaggle/Titanic1.py", line 14, in <module>
    number_passengers = np.size(data[0::,0].astype(np.float))
IndexError: too many indices

如果我能提供更多信息,请告诉我。

谢谢。


更新 我做了the edits,但是有关模块不可调用的另一个错误:

Traceback (most recent call last):
  File "/Users/scdavis6/Documents/Kaggle/Titanic1.py", line 5, in <module>
    csv_file_object = fileName = os.path('train.csv')
TypeError: 'module' object is not callable

更新 我将os.path('train.csv')更改为os.path.join('train.csv'),但是在找不到.csv文件时又出现了另一个错误。

Traceback (most recent call last):
  File "/Users/scdavis6/Documents/Kaggle/Titanic1.py", line 9, in <module>
    with open(fileName) as f:
IOError: [Errno 2] No such file or directory: 'train.csv'

这是.csv文件和python脚本的绝对路径。

import os
os.path.abspath("/Users/scdavis6/Desktop/train.csv")

'/用户/ scdavis6 /桌面/ train.csv'

import os
os.path.abspath("/Users/scdavis6/Documents/Kaggle/Titanic1.py")

'/用户/ scdavis6 /文档/ Kaggle / Titanic1.py'

1 个答案:

答案 0 :(得分:1)

假设这是您的实际代码,问题是您永远不会打开该文件。您的csv_file_object仍然只是fileName,因此您的data由该文件名的字符组成,从而产生一维numpy数组。

相反,您应该open该文件并为其创建csv.reader

import csv
with open(fileName) as f:
    reader = csv.reader(f)
    data=[]
    for row in reader:
        data.append(row)
    data = np.array(data)

或更短:data = np.array([row for row in csv.reader(f)])


更新:您遇到的新错误可能是由于您意外更改造成的 os.path.join('train.csv')os.path('train.csv'),即不是从join模块调用os.path函数,而是(尝试)调用模块本身。


更新:您的train.csv文件似乎与Python脚本不在同一目录中,因此如果您只使用文件名,脚本将无法找到该文件。您必须将绝对路径与文件名一起使用:

fileName = os.path.join('/Users/scdavis6/Desktop', 'train.csv')

或只是fileName = '/Users/scdavis6/Desktop/train.csv'。或者,将您的train.csv文件移动到与Python脚本相同的目录中。除非您在不同目录中的多个脚本中使用此文件,否则这可能确实是更好,更健壮的选项。