【问题标题】:IndexError: too many indices on PythonIndexError:Python 上的索引过多
【发布时间】:2014-02-06 10:03:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 数据转换成np.array后的形状是什么? (打印 data.shape)
  • @Mailerdaimon print data.shape 命令给出:您平台上的目录分隔符 (darwin): / (9,)
  • @ScottDavis 看看下面我的回答。我认为您根本不读取文件,而只是拆分文件名,从而生成一维数组,这些复杂的 numpy 索引对此毫无意义。
  • 因为(根据错误)您将os.path.join('train.csv') 更改为os.path('train.csv')。另外,请不要完全替换问题中的代码,而是在其下方添加更新版本,否则答案会看起来很尴尬。
  • @ScottDavis 查看我的更新。

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


【解决方案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'),即不是从 os.path 模块调用 join 函数,而是(试图)调用模块本身。


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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多