我正在尝试使用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个布尔值。
我们将不胜感激。
答案 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]