【问题标题】:How to check if a column exists in Pandas如何检查 Pandas 中是否存在列
【发布时间】:2014-09-12 06:22:48
【问题描述】:

有没有办法检查 Pandas DataFrame 中是否存在列?

假设我有以下 DataFrame:

>>> import pandas as pd
>>> from random import randint
>>> df = pd.DataFrame({'A': [randint(1, 9) for x in xrange(10)],
                       'B': [randint(1, 9)*10 for x in xrange(10)],
                       'C': [randint(1, 9)*100 for x in xrange(10)]})
>>> df
   A   B    C
0  3  40  100
1  6  30  200
2  7  70  800
3  3  50  200
4  7  50  400
5  4  10  400
6  3  70  500
7  8  30  200
8  3  40  800
9  6  60  200

我想计算df['sum'] = df['A'] + df['C']

但首先我想检查df['A'] 是否存在,如果不存在,我想计算df['sum'] = df['B'] + df['C']

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    可以使用集合的方法issuperset

    set(df).issuperset(['A', 'B'])
    # set(df.columns).issuperset(['A', 'B'])
    

    【讨论】:

      【解决方案2】:

      要检查一个或多个列是否都存在,可以使用set.issubset,如:

      if set(['A','C']).issubset(df.columns):
         df['sum'] = df['A'] + df['C']                
      

      正如@brianpck 在评论中指出的那样,set([]) 也可以用花括号构造,

      if {'A', 'C'}.issubset(df.columns):
      

      有关花括号语法的讨论,请参阅 this question

      或者,您可以使用生成器推导,如:

      if all(item in df.columns for item in ['A','C']):
      

      【讨论】:

        【解决方案3】:

        只是为了建议另一种不使用 if 语句的方法,您可以使用 get() 方法来处理 DataFrames。根据问题进行求和:

        df['sum'] = df.get('A', df['B']) + df['C']
        

        DataFrame get 方法的行为与 python 字典相似。

        【讨论】:

        • 谢谢,这行得通:df['sum'] = df.get('A') + df['B'] + df['C'] 或者为了避免任何列错误(如果不存在),对所有术语使用 get() .. 例如df['sum'] = df.get('A') + df.get('B') + df.get('C')
        • df.get("A") + df.get("B") 如果那些不存在,仍然会给你一个错误,只是更令人困惑的TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType',而不是更容易调试的KeyError.get() 仅应在您实际计划使用默认值时使用,否则它只会将错误从故障点推开,并使状态合同更加难以理解。 Gerges 回答的重点是使用 .get() 的第二个参数来指定一个您知道将作为后备存在的列,而不是让一堆 None 使代码崩溃。
        【解决方案4】:

        这将起作用:

        if 'A' in df:
        

        但为了清楚起见,我可能会写成:

        if 'A' in df.columns:
        

        【讨论】:

        • 如果A 不存在于df 中,则可以使用if not 'A' in df.columns: 执行操作
        • 另外,您可以使用if header in df.columns for header in ('A', 'B')检查多个
        猜你喜欢
        • 2017-01-01
        • 2016-09-19
        • 2019-02-22
        • 1970-01-01
        • 2021-09-19
        • 2020-12-31
        • 2018-05-10
        • 2010-09-18
        相关资源
        最近更新 更多