使用布尔数组调用iloc()

时间:2017-01-05 17:52:04

标签: python arrays pandas boolean slice

我正在尝试使用iloc方法。根据文档,布尔数组是允许的输入。

我理解这一点的方法是,如果我有一个布尔数组idx,其值为F,T,T,T,我将其作为输入传递如下:df.iloc(:,idx)然后我将得到第二个,dd和df的第4列(假设df有4列)。

我试图实现这个但是我遇到了错误。

作为一个例子,我有一个数据帧df

            col1    col2    col3    col4
      0      1       2        3       4
      1      5       6        7       8 

我还有一个Pandas布尔系列:

     idx = pd.Series(['False', 'True', 'True', 'True'])

我将布尔系列转换为布尔值np.array:

    idx = idx.values

然后我将它传递给iloc

    df.iloc[: , idx]

我收到错误消息:

    IndexError: positional indexers are out-of-bounds

我不明白,因为数据帧有4列,我传递了4个布尔值。

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

你的问题是你传递iloc一系列字符串而不是一系列布尔值。您没有创建一个布尔数组,而是创建了一系列值为' True'并且'错误'。

更改此

idx = pd.Series(['False', 'True', 'True', 'True'])

到此

idx = pd.Series([False, True, True, True])

您还需要使用您创建的系列的值,因为NotImplemented

我收到df.iloc[:, idx]错误

所以请改用:

df.iloc[:, idx.values]