检查是不是存在多个列
Posted
技术标签:
【中文标题】检查是不是存在多个列【英文标题】:Check for existence of multiple columns检查是否存在多个列 【发布时间】:2016-10-30 10:02:55 【问题描述】:是否有更复杂的方法来检查数据框 df
是否包含名为 Column 1
和 Column 2
的 2 列:
if numpy.all(map(lambda c: c in df.columns, ['Column 1', 'Columns 2'])):
do_something()
【问题讨论】:
【参考方案1】:你可以使用Index.isin
:
df = pd.DataFrame('A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3])
print (df)
A B C D E F
0 1 4 7 1 5 7
1 2 5 8 3 3 4
2 3 6 9 5 6 3
如果需要检查至少一个值,请使用any
cols = ['A', 'B']
print (df.columns.isin(cols).any())
True
cols = ['W', 'B']
print (df.columns.isin(cols).any())
True
cols = ['W', 'Z']
print (df.columns.isin(cols).any())
False
如果需要检查all
值:
cols = ['A', 'B', 'C','D','E','F']
print (df.columns.isin(cols).all())
True
cols = ['W', 'Z']
print (df.columns.isin(cols).all())
False
【讨论】:
嗯,谢谢,但不幸的是,从我的角度来看,这看起来并没有那么好......我希望有一些语法上更令人愉悦的东西。 我添加了另一个解决方案,请检查一下。 而且这个解决方案更好,所以我删除了旧的。isin
解决方案看起来已经好多了。我最喜欢的解决方案是 cols in df.columns
,但这不起作用,因为它无法区分所有和任何。
如果您想检查'A'
和'B'
是否都在列列表中,您应该使用is_subset
解决方案。 all()
在这种情况下会给你False
因为isin
返回一个布尔系列。【参考方案2】:
我知道这是一篇旧帖子...
来自answer:
if set(['Column 1', 'Column 2']).issubset(df.columns):
do_something()
或者更优雅一点:
if 'Column 1', 'Column 2'.issubset(df.columns):
do_something()
【讨论】:
如果所有列都存在于 df 中,则返回 true,即使 df 还包含其他列。谢谢! 是的,那是 Wiese 先生正在寻找的,检查第 1 列和第 2 列是否在数据框中,然后执行一些操作。他不在乎第 3 列是否在 df 中【参考方案3】:给定答案的一个问题(也许它适用于 OP)是它测试是否所有数据框的列都在给定列表中 - 但不是所有给定列表的项目都在数据框中列。
我的解决方案是:
test = all([ i in df.columns for i in ['A', 'B'] ])
其中test
是一个简单的True
或False
【讨论】:
以上是关于检查是不是存在多个列的主要内容,如果未能解决你的问题,请参考以下文章