Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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 为什么列保留在DataFrame';s索引,即使在它被删除之后_Python_Pandas - Fatal编程技术网

Python 为什么列保留在DataFrame';s索引,即使在它被删除之后

Python 为什么列保留在DataFrame';s索引,即使在它被删除之后,python,pandas,Python,Pandas,考虑以下代码: >>> data = pandas.DataFrame({ 'user': [1, 5, 3, 10], 'week': [1, 1, 3, 4], 'value1': [5, 4, 3, 2], 'value2': [1, 1, 1, 2] }) >>> data = data.pivot_table(index='user', columns='week', fill_value=0) >>> data['target']

考虑以下代码:

>>> data = pandas.DataFrame({ 'user': [1, 5, 3, 10], 'week': [1, 1, 3, 4], 'value1': [5, 4, 3, 2], 'value2': [1, 1, 1, 2] })
>>> data = data.pivot_table(index='user', columns='week', fill_value=0)
>>> data['target'] = [True, True, False, True]
>>> data
     value1       value2       target
week      1  3  4      1  3  4
user
1         5  0  0      1  0  0   True
3         0  3  0      0  1  0   True
5         4  0  0      1  0  0  False
10        0  0  2      0  0  2   True
现在如果我称之为:

>>> 'target' in data.columns
True
它按预期返回
True
。但是,为什么该值也返回
True

>>> 'target' in data.drop('target', axis=1).columns
True
如何从表中删除列,使其不再位于索引中,并且上述语句返回
False

从现在起(熊猫0.19.2),多索引将在其结构中保留所有曾经使用过的标签。删除列不会从多重索引中删除它的标签,它仍然在多重索引中被引用。见长项

因此,你必须解决这个问题并做出假设。如果您确定要检查的标签位于特定索引级别(示例中为级别0),则一种方法是:

'target' in data.drop('target', axis=1).columns.get_level_values(0)
Out[145]: False
如果可以是任何级别,则可以使用
get_values()
并在整个列表中查找:

import itertools as it
list(it.chain.from_iterable(data.drop('target', axis=1).columns.get_values()))
Out[150]: ['value1', 1, 'value1', 3, 'value1', 4, 'value2', 1, 'value2', 3, 'value2', 4]
注意:在0.20.0(大约1个月)中,这将合并到:,这将允许
data.columns=data.columns。删除未使用的\u levels()
来修复此问题(它还不是自动的,但可以缓解问题)