使用python-pandas索引数据框时,无法为非唯一标签获取正确的切片绑定

时间:2016-06-21 03:55:58

标签: python pandas dataframe

我有这样的数据框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]时只有一行。为什么会发生这种情况,如何正确索引呢?先感谢您!

3 个答案:

答案 0 :(得分:2)

错误讯息解释为hereif the index is not monotonic, then both slice bounds must be unique members of the index

.loc.iloc之间的区别在于label与基于integer position的索引 - see docs.loc旨在选择单个labelsslices个标签。这就是为什么.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对其进行排序,也可以首先基于索引汇总数据,然后进行检索。 希望这会有所帮助。