2014-01-17 8 views
0

OSX에서 Python 2.7 용 Eclipse 환경에서 PyDev 사용. 배열의 요소를 계산하고 배열의 요소를 합산하려고합니다. 색인에 오류가 발생했습니다.IndexError : Python의 색인이 너무 많습니다.

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을 변경 ('기차 .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") 

'/Users/scdavis6/Desktop/train.csv'

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

'/Users/scdavis6/Documents/Kaggle/Titanic1.py'

+0

데이터를 np.array로 변환 한 후의 모양은 무엇입니까? (print data.shape) – Mailerdaimon

+0

@Mailerdaimon print data.shape 명령은 다음을 제공합니다. 플랫폼 (darwin)의 디렉토리 구분 기호 :/(9,) –

+0

@ScottDavis 아래에서 내 대답을 살펴보십시오. 난 당신이 전혀 파일을 읽지 않는 것, 대신 그 파일 이름을 분할, 그 복잡한 numpy 색인이 이해가되지 않는 1 차원 배열의 결과. –

답변

1

코드에서 문제는 파일을 절대 열지 않는다는 것입니다. csv_file_object은 여전히 ​​fileName이므로 data은 해당 파일 이름의 문자로 이루어져 1D 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('train.csv')os.path.join('train.csv')을 변경, 대신에서 join 함수를 호출에 아마 os.path 모듈에서는 모듈 자체를 호출하려고합니다.


업데이트 : 것 같다 당신의 train.csv 파일은 그냥 파일 이름을 사용하는 경우, 따라서 스크립트 파일을 찾을 수 없습니다, 파이썬 스크립트와 같은 디렉토리에 있지 않습니다. 파일 이름과 함께 절대 경로를 사용해야합니다.

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

또는 단지 fileName = '/Users/scdavis6/Desktop/train.csv'입니다. 또는 train.csv 파일을 Python 스크립트와 동일한 디렉토리로 이동하십시오. 다른 디렉토리의 여러 스크립트에서이 파일을 사용하지 않는 한 실제로는 더 강력하고 강력 할 수 있습니다.