使用布尔数组调用 iloc()

Calling iloc() with a boolean array

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

我的理解是,如果我有一个值为 F、T、T、T 的布尔数组 idx,并且我按如下方式将其作为输入传递:df.iloc(: , idx) 那么我将得到 df 的第 2、3d 和第 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 个布尔值。

我们将不胜感激。

您的问题是您向 iloc 传递了一系列字符串而不是一系列布尔值。您没有创建布尔数组,而是创建了一系列具有值 'True' 和 'False'.

的字符串

改变这个

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

对此

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

而且您还必须使用您创建的系列的值,因为我收到 NotImplemented 错误 df.iloc[:, idx]

所以改用这个:

df.iloc[:, idx.values]