2015-09-29 32 views
1

我收到這樣的信息:指數誤差:數組太多指標在定義變量

--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-23-60bbe78150c2> in <module>() 
     17 men_only_stats=data[0::4]!="male" 
     18 
---> 19 women_onboard = data[women_only_stats,1].astype(np.float) 
     20 men_onboard = data[men_only_stats,1].astype(np.float) 
     21 proportion_women_survive= sum(women_onboard)/size(women_onboard) 

IndexError: too many indices for array 

當我進入我的代碼在這裏:

import csv as csv 
import numpy as np 

csv_file_object = csv.reader(open(r"C:\Users\IT'S OVER 9000\Downloads\train.csv", 'rb')) 
header = csv_file_object.next() 
data=[] 

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

number_passengers= np.size(data[0::4,1].astype(np.float)) 
passengers_survived=np.sum(data[0::4,1].astype(np.float)) 
proportion_survived=passengers_survived/number_passengers 

women_only_stats= data[0::4]=="female" 
men_only_stats=data[0::4]!="male" 

women_onboard = data[women_only_stats,1].astype(np.float)  
men_onboard = data[men_only_stats,1].astype(np.float) 
proportion_women_survive= sum(women_onboard)/size(women_onboard) 
proportion_men_survive= sum(men_onboard)/size(men_onboard) 
print proportion_women_survive 
print proportion_men_survive 

下面是我的CVS文件數據的兩行:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked,‌​,,, 
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5,21171,7.25,,S,,,  
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC,17599,71.2833,C85,C,,, 

我做錯了什麼,是什麼原因造成的,以及如何解決?

+0

不應該'men_only_stats'使用'==「男性''? – Barmar

+0

在我的數據集中,只有兩個類別:「男性」和「女性」。 如果我把!=「女性」,那麼python將抓取數據的性別指數,而不是女性。但將它切換爲男性可以完成同樣的事情。 – H0C

+0

它看起來像你的變量包含女性。 '!=「male」'和'==「女性」'是一回事,不是嗎? – Barmar

回答

0

最可能的是,當你的布爾數組(索引)的問題 -

women_only_stats= data[0::4]=="female" 

我相信data是一個二維數組,因此data[0::4]採取每4行從數組(而不是第4列),然後嘗試將其與字符串值進行比較,然後返回True/False值的二維數組。這會導致問題。

其實你想要做的是什麼 -

women_only_stats = data[:,4]=="female" 

同爲men_only_stats,也應該重新考慮到處在那裏你已經使用[0::4],這意味着該維度每4個元素。

另外,最後我想建議,對於這種類型的CSV /數據操作,使用熊貓庫會比使用numpy容易得多。

0

錯誤IndexError: too many indices for array當您嘗試,就好像是2D訪問一維數組或二維數組,就好像是3D等

在這種情況下,你正在訪問data,一維數組發生。線引發錯誤:

women_onboard = data[women_only_stats,1].astype(np.float) 

...是使用語法array_var[x,y],它只能被用於2D +陣列。該語法表示您正在訪問第x行和第y列的元素,因此它不適用於只有一行的數組(如果以這種方式考慮,那麼只有一列)。

如果您搜索該錯誤消息,您會收到很多人提出的類似問題的結果,例如here,herehere