0

在 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

让我知道我是否可以提供更多信息。

谢谢你。


更新: 我进行了编辑,但得到了另一个关于模块不可调用的错误:

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")

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

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

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

4

1 回答 1

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 脚本相同的目录。除非您在不同目录中的多个脚本中使用此文件,否则这确实可能是更好、更健壮的选项。

于 2014-01-17T09:21:58.630 回答