" IndexError:位置索引器超出范围"当他们明显没有

时间:2017-05-22 22:28:30

标签: python pandas dataframe conditional-statements

这是我正在使用的一些代码的MWE。我通过切片和一些条件慢慢缩小初始数据帧,直到我只有我需要的行。每行五行实际上代表一个不同的对象,因此,当我减少一些事情时,如果每个五个块中的任何一行符合条件,我想保留它 - 这就是keep.index完成的循环。无论如何,当我完成时,我可以看到我想要的最终索引存在,但是我得到一条错误消息说" IndexError:位置索引器超出界限。"这里发生了什么?

import pandas as pd
import numpy as np

temp = np.random.rand(100,5)

df = pd.DataFrame(temp, columns=['First', 'Second', 'Third', 'Fourth', 'Fifth'])

df_cut = df.iloc[10:]

keep = df_cut.loc[(df_cut['First'] < 0.5) & (df_cut['Second'] <= 0.6)]

new_indices_to_use = []
for item in keep.index:
    remainder = (item % 5)
    add = np.arange(0-remainder,5-remainder,1)
    inds_to_use = item + add
    new_indices_to_use.append(inds_to_use)

new_indices_to_use = [ind for sublist in new_indices_to_use for ind in sublist]
final_indices_to_use = []
for item in new_indices_to_use:
    if item not in final_indices_to_use:
        final_indices_to_use.append(item)

final = df_cut.iloc[final_indices_to_use]

1 个答案:

答案 0 :(得分:6)

关于.iloc的Pandas文件(强调我的):

  

Pandas提供了一套方法,以获得纯粹基于整数的索引。语义紧跟python和numpy切片。这些是 0-based indexing

您尝试按标签使用它,这意味着您需要.loc

从你的例子:

mpirun -np 4 ./test