使用布尔数组调用 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]
我正在试验 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]