Pandas 轴 1 上带有布尔数组的 loc() 方法

Pandas loc() method with boolean array on axis 1

我正在试验 Pandas loc() 方法,使用布尔数组作为参数。

我创建了一个小数据框来玩:

    col1    col2    col3    col4
 0  a        1       2       3
 1  b       NaN     NaN      6
 2  c       NaN      8       9
 3  d       NaN     11       12
 4  e       13       14      15
 5  f       17      18       19
 6  g       21  2    2       23

还有一个布尔数组,用于在轴 1 上对多个列进行子集化:

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

然后我尝试了:

 df.loc[: , a1]

我收到一条错误消息:

IndexingError: Unalignable boolean Series key provided

我如何应用布尔数组来对 loc() 的多个列进行子集化?

您需要通过 valuesSeries 转换为 numpy array:

print (df.loc[: , a1.values])
  col1  col3
0    a   2.0
1    b   NaN
2    c   8.0
3    d  11.0
4    e  14.0
5    f  18.0
6    g   2.0

或者需要通过 df.columns 添加 index 以对齐 SeriesindexDataFramecolumns:

a1 = pd.Series([True, False, True, False], index=df.columns)
print (df.loc[: , a1])
  col1  col3
0    a   2.0
1    b   NaN
2    c   8.0
3    d  11.0
4    e  14.0
5    f  18.0
6    g   2.0