【问题标题】: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()

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2020-12-14
      • 2022-12-20
      相关资源
      最近更新 更多