Pandas loc() 方法在轴 1 上具有布尔数组

Posted

技术标签:

【中文标题】Pandas loc() 方法在轴 1 上具有布尔数组【英文标题】:Pandas loc() method with boolean array on axis 1 【发布时间】:2017-05-21 13:32:53 【问题描述】:

我正在试验 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:提供了不可对齐的布尔系列键

如何将布尔数组应用到具有loc() 的多个列的子集?

【问题讨论】:

【参考方案1】:

您需要通过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

或者需要添加index by df.columns 以将indexSeriescolumnsDataFrame 对齐:

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

【讨论】:

以上是关于Pandas loc() 方法在轴 1 上具有布尔数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 数据框布尔索引中使用“相反布尔值”的正确方法

python--pandas切片

pandas数据框loc属性语法及示例

004.pandas.DataFrame

004.pandas.DataFrame

Pandas - DataFrame 基本操作