【发布时间】: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()
【问题讨论】:
是否有更复杂的方法来检查数据框 df 是否包含名为 Column 1 和 Column 2 的 2 列:
if numpy.all(map(lambda c: c in df.columns, ['Column 1', 'Columns 2'])):
do_something()
【问题讨论】:
你可以使用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 返回一个布尔系列。
我知道这是一篇旧帖子...
来自answer:
if set(['Column 1', 'Column 2']).issubset(df.columns):
do_something()
或者更优雅一点:
if {'Column 1', 'Column 2'}.issubset(df.columns):
do_something()
【讨论】:
给定答案的一个问题(也许它适用于 OP)是它测试是否所有数据框的列都在给定列表中 - 但不是所有给定列表的项目都在数据框中列。
我的解决方案是:
test = all([ i in df.columns for i in ['A', 'B'] ])
其中test 是一个简单的True 或False
【讨论】: