Como verificar se existe uma coluna no Pandas

274

Existe uma maneira de verificar se existe uma coluna em um DataFrame do Pandas?

Suponha que eu tenha o seguinte 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

e eu quero calcular df['sum'] = df['A'] + df['C']

Mas primeiro quero verificar se df['A']existe e, se não, quero calcular df['sum'] = df['B'] + df['C'].

npires
fonte

Respostas:

585

Isso funcionará:

if 'A' in df:

Mas, para maior clareza, eu provavelmente escreveria como:

if 'A' in df.columns:
chrisb
fonte
2
o contrário seria possível: if not 'A' in df.columns:executar uma operação se Anão estiver presente emdf
Robvh
81

Para verificar se uma ou mais colunas existem, você pode usar set.issubset, como em:

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

Como @brianpck aponta em um comentário, como set([])alternativa pode ser construído com chaves,

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

Veja esta pergunta para uma discussão sobre a sintaxe de chaves.

Ou, você pode usar uma compreensão de lista, como em:

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

Apenas para sugerir outra maneira sem usar as instruções if, você pode usar o get()método para DataFrames. Para realizar a soma com base na pergunta:

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

O DataFramemétodo get tem comportamento semelhante aos dicionários python.

Gerges
fonte