Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧列的布尔掩码_Python_Pandas_Dataframe_Boolean - Fatal编程技术网

Python 数据帧列的布尔掩码

Python 数据帧列的布尔掩码,python,pandas,dataframe,boolean,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') 然后我尝试了相同的代码,但使用了另一个

我的目标是使用布尔掩码从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将布尔切片视为掩码,而将整数切片视为查找。在您的示例中,您可以看到
列[[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]

这是因为Pandas使用将布尔切片视为掩码,而将整数切片视为查找。在您的示例中,您可以看到
列[[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]

检查此问题并回答:布尔索引!=整数索引
df.columns[[1,0,1]]
将返回具有以下索引的列列表:
[1,0,1]
检查此问题并接受回答:布尔索引!=整数索引
df.columns[[1,0,1]]
将返回包含以下索引的列列表:
[1,0,1]