检查是不是存在多个列

Posted

技术标签:

【中文标题】检查是不是存在多个列【英文标题】:Check for existence of multiple columns检查是否存在多个列 【发布时间】:2016-10-30 10:02:55 【问题描述】:

是否有更复杂的方法来检查数据框 df 是否包含名为 Column 1Column 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 是一个简单的TrueFalse

【讨论】:

以上是关于检查是不是存在多个列的主要内容,如果未能解决你的问题,请参考以下文章

检查 DF 中是不是存在列 - Java Spark

如何使用 JdbcTemplate 检查表列是不是存在?

检查 OleDb 表中是不是存在列

如何检查 SQL Server 中是不是存在列?

检查列上是不是存在函数

检查列是不是已存在,如果不存在,则在 sqlite 中更改表