Cómo verificar si existe una columna en Pandas

274

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

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
   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

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

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

npires
fuente

Respuestas:

586

Esto funcionará:

if 'A' in df:

Pero para mayor claridad, probablemente lo escribiría como:

if 'A' in df.columns:
chrisb
fuente
2
al revés uno podría usar: if not 'A' in df.columns:para ejecutar una operación si Ano está presente endf
Robvh
81

Para verificar si existen una o más columnas, 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, set([])alternativamente se puede construir con llaves,

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

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

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

if all([item in df.columns for item in ['A','C']]):
C8H10N4O2
fuente
11
O simplemente{'A', 'B'}.issubset()
brianpck
7

Solo para sugerir otra forma sin usar declaraciones if, puede usar el get()método para DataFrames. Para realizar la suma basada en la pregunta:

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

El DataFramemétodo get tiene un comportamiento similar al de los diccionarios python.

Gerges
fuente