微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-为什么即使删除列,列也仍保留在DataFrame的索引中

考虑以下代码

>>> 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),多索引将在其结构中保留所有已使用的标签.删除列不会从多索引中删除标签,并且仍在其中引用它.参见GH长项here.

因此,您必须解决该问题并做出假设.如果确定要检查的标签位于特定索引级别(示例中为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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐