我有这样的数据框df
:
a b
10 2
3 1
0 0
0 4
....
# about 50,000+ rows
我希望选择df[:5, 'a']
。但是当我致电df.loc[:5, 'a']
时,我收到了一个错误:KeyError: 'Cannot get right slice bound for non-unique label: 5
。当我调用df.loc[5]
时,结果包含250行,而当我使用df.iloc[5]
时只有一行。为什么会发生这种情况,如何正确索引呢?先感谢您!
答案 0 :(得分:2)
错误讯息解释为here:if the index is not monotonic, then both slice bounds must be unique members of the index
。
.loc
和.iloc
之间的区别在于label
与基于integer position
的索引 - see docs。 .loc
旨在选择单个labels
或slices
个标签。这就是为什么.loc[5]
选择index
具有值250的所有行(并且错误是关于非唯一索引)的原因。相反,iloc
选择第5行(0索引)。这就是为什么你只获得一行,索引值可能是5
也可能不是weights = net.LW
biases = net.b
。希望这有帮助!
答案 1 :(得分:1)
要使用非唯一索引进行过滤,请尝试以下操作: df.loc [(df.index> 0)&(df.index <2)]
答案 2 :(得分:0)
您要解决的方式的问题是,有多个行的索引为5。因此loc属性不知道选择哪一个。要知道只是执行df.loc [5],您将获得具有相同索引的行数。 您可以使用sort_index对其进行排序,也可以首先基于索引汇总数据,然后进行检索。 希望这会有所帮助。