Skip to main content
 首页 » 编程设计

python之Pandas DataFrame 列的 boolean 掩码

2025年05月04日13zhoujg

我的目标是使用 boolean 掩码从 DataFrame 中获取有用的列。

我尝试了这样一段代码:

df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [101, 101, 102, 101, 102], 'c': [23, 12, 54, 65, 21]}) 
mask = [True, False, True] 
df.columns[mask] 

结果就是我真正需要的:

Index([u'a', u'c'], dtype='object') 

然后我尝试使用相同的代码,但使用另一个掩码:

mask_i = [1, 0, 1] 
 
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [101, 101, 102, 101, 102], 'c': [23, 12, 54, 65, 21]}) 
mask_i = [1, 0, 1] 
df.columns[mask] 

我期望得到相同的结果,但得到了所有索引:

Index([u'b', u'a', u'b'], dtype='object') 

然后我检查:

mask_i = [1, 0, 1] 
mask = [True, False, True] 
print mask == mask_i` 
 
# Result: `True` 

有人可以解释一下为什么掩码是相等的,但我得到不同的结果。

请您参考如下方法:

这是因为 Pandas 使用将 boolean 切片视为掩码,而将整数切片视为查找。在您的示例中,您可以看到 columns[[1, 0, 1]] 查找第二列,然后是第一列,然后是第二列:["b", "a", "b"].

要将整数索引转换为 boolean 值,您可以使用:

>>> np.array([1, 0, 1]).astype(bool) 
array([ True, False,  True], dtype=bool) 
>>> map(bool, [1, 0, 1]) 
[True, False, True]