Cómo comprobar si existe una columna en Pandas

¿Hay alguna forma de verificar si existe una columna en un DataFrame de Pandas?

Supongamos que tengo el siguiente 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 ABC 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 

y quiero calcular df['sum'] = df['A'] + df['C']

Pero primero quiero verificar si df['A'] existe, y si no, quiero calcular df['sum'] = df['B'] + df['C'] .

Esto funcionará:

 if 'A' in df: 

Pero para mayor claridad, probablemente lo escriba como:

 if 'A' in df.columns: 

Para verificar si una o más columnas existen, puede usar set.issubset , como en:

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

Como @brianpck señala en un comentario, el set([]) puede construirse alternativamente con llaves (solo disponible en Python 2.7+):

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

Vea esta pregunta para una discusión de la syntax de llaves.

O bien, puede utilizar una lista de comprensión, como en:

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

Solo para sugerir otra forma sin usar sentencias if, puede usar el método get() para DataFrame s. Para realizar la sum basada en la pregunta:

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

El método de obtención de DataFrame tiene un comportamiento similar al de los diccionarios de Python.