在识别最大值行然后在其他地方使用时,索引越界错误

时间:2017-02-04 10:50:10

标签: python pandas

我对编程非常陌生(< 2周),并且我必须学习Python3作为课程的一部分,所以请在任何答案中牢记这一点!我正在开发新的Mac,以防万一。

我有一个数据表,它是从csv文件中获取并编译成3列,有几千行。我根据某些条件过滤掉了很多行,留下了大约200行(但由于初始排序,其索引大约为8000-8300行)。现在我试图找到另一列中出现最高值的时间(其中一列)。当我运行下面的代码时,它会给我一个错误"索引越界"。我在同一个错误消息中读到了另一个问题,但我并不真正理解如何在这里应用答案。

maxrow=df['A'].idxmax()
maxA=df['A'].irow(maxrow)
maxtime = df['time'].irow(maxrow)
maxB = df['B'].irow(maxrow)

据我所知,第一行是找到A最大的行,并指定一个变量" maxrow"有那个行号。 第二行是创建变量maxA并为其分配在A行最大行中找到的值。 但是,在这个阶段,它似乎造成了一个问题。我应该提一下,如果我插入一个小于200的行号而不是" maxrow"在第3行,第4行和第5行,根本没有问题(除了它不是选择的右行)。

所以我认为程序在某种程度上是基于其索引号来识别最大行,但是当它使用它时,它正在使用行的实际新排序,其中还不够。

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

这应解决它:

maxrow = df['A'].idxmax()
maxA = df['A'].loc[maxrow]
maxtime = df['time'].loc[maxrow]
maxB = df['B'].loc[maxrow]

更正确地使用loc

maxrow = df['A'].idxmax()
maxA = df.loc[maxrow, 'A']
maxtime = df.loc[maxrow, 'time']
maxB = df.loc[maxrow, 'B']

更正确的用法,只需拨打一次loc

maxrow = df['A'].idxmax()
maxA, maxtime, maxB = df.loc[maxrow, ['A', 'time', 'B']]

关于上述评论的一些注释:

  • loc[]应与方括号一起使用,而不是圆括号。这解释了你得到的指针:<pandas.core.indexing._iLocIndexer object at 0x1179d5978>
  • 您应该使用loc而不是iloc,因为idxmax会返回与您的数据框索引相对应的索引。在您的情况下,您可能有一个增量索引,所以它并不重要。我建议您阅读文档(lociloc)以了解其中的差异。
  • 重新发布弃用,请参阅this question:&#34;弃用是应用于软件功能的状态,表示应避免使用#34;。