我收到了这条消息:
---------------------------------------------------------------------------
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 :(得分:0)
最有可能的问题是,当您使用bool数组时(用于索引) -
women_only_stats= data[0::4]=="female"
我相信data
是一个2D数组,因此data[0::4]
从数组(而不是第4列)获取每第4行,然后你尝试将它与字符串值进行比较,因此你获取一个真/假值的2D数组。这导致了这个问题。
实际上你想做的是 -
women_only_stats = data[:,4]=="female"
同样适用于men_only_stats
,您也应该重新考虑使用[0::4]
的所有地方,这意味着该维度中的每个第4个元素。
另外,最后我想建议对于这种类型的csv /数据操作,使用pandas库比使用numpy要容易得多。
答案 1 :(得分:0)
当您尝试访问1d数组时发生错误/** Tree node implementation using "last-child-prev-sibling" */
MyTreeNode<E> implements TreeNode<E> {
MyTreeNode<E> parent;
MyTreeNode<E> lastChild;
MyTreeNode<E> prevSibling;
// I bet it is add child, which add a new child to the last
public void setChild(TreeNode<E> child) {
if (! (child instanceof MyTreeNode)) {
throw new SomeKindOfImpatibleTypeException();
}
MyTreeNode<E> newLastChild = (MyTreeNode<E>) child;
newLastChild.parent = this;
newLastChild.previousChild = this.lastChild;
this.lastChild = newLastChild;
}
public TreeNode<E> getNextSibling() {
if (this.parent == null) {
return null;
}
MyTreeNode<E> n = this.parent.lastChild;
if (n == this) {
return null;
}
for ( ; n != null; n = n.prevSibling) {
if (n.prevSibling == this) {
return n;
}
}
return null;
}
public TreeNode<E> firstChild() {
if (lastChild == null) {
return null;
}
for (TreeNode<E> n = lastNode;
n.prevSibling != null;
n=n.prevSibling) {
}
return n;
}
}
,就像它是2d一样,或者是2d数组,就好像是3d等一样。
在这种情况下,您正在访问一个1d数组IndexError: too many indices for array
。抛出错误的一行:
data
...正在使用语法women_onboard = data[women_only_stats,1].astype(np.float)
,它只能用于2d +数组。该语法意味着您正在访问行array_var[x,y]
和列x
中的元素,因此它不适用于只有一行的数组(如果您这样想的话,它只适用于一列)