Comment vérifier si une colonne existe dans Pandas

275

Existe-t-il un moyen de vérifier si une colonne existe dans un Pandas DataFrame?

Supposons que j'ai le DataFrame suivant:

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

et je veux calculer df['sum'] = df['A'] + df['C']

Mais d'abord, je veux vérifier s'il df['A']existe, et sinon, je veux calculer à la df['sum'] = df['B'] + df['C']place.

npires
la source

Réponses:

587

Cela fonctionnera:

if 'A' in df:

Mais pour plus de clarté, je l'écrirais probablement comme:

if 'A' in df.columns:
chrisb
la source
2
l'inverse, on pourrait utiliser: if not 'A' in df.columns:pour exécuter une opération si elle An'est pas présente dansdf
Robvh
81

Pour vérifier si une ou plusieurs colonnes existent toutes, vous pouvez utiliser set.issubset, comme dans:

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

Comme @brianpck le fait remarquer dans un commentaire, set([])peut également être construit avec des accolades,

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

Voir cette question pour une discussion sur la syntaxe des accolades.

Ou, vous pouvez utiliser une compréhension de liste, comme dans:

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

Pour suggérer une autre façon sans utiliser d'instructions if, vous pouvez utiliser la get()méthode de l' DataFrameart. Pour effectuer la somme basée sur la question:

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

La DataFrameméthode get a un comportement similaire à celui des dictionnaires python.

Gerges
la source