Pandas DataFrame列的布尔掩码

时间:2016-12-26 16:40:47

标签: python pandas dataframe 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`

有人可以解释为什么面具是平等的,但我会得到不同的结果。

1 个答案:

答案 0 :(得分:7)

这是因为Pandas使用对待布尔切片作为掩码,但整数切片作为查找。在您的示例中,您可以看到columns[[1, 0, 1]]查找第二列,然后是第一列,然后是第二列:["b", "a", "b"]

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

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