Existe-t-il un moyen de vérifier si une colonne existe dans un DataFrame Pandas?
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 si df['A']
existe, et sinon, je veux calculer df['sum'] = df['B'] + df['C']
à la place.
Cela fonctionnera:
if 'A' in df:
Mais pour plus de clarté, j'écrirais probablement ceci:
if 'A' in df.columns:
Pour vérifier si une ou plusieurs colonnes existent, 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 de 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']]):
_
Juste pour suggérer une autre méthode sans utiliser les instructions if, vous pouvez utiliser la méthode get()
pour DataFrame
s. Pour effectuer la somme basée sur la question:
df['sum'] = df.get('A', df['B']) + df['C']
Le comportement de la méthode DataFrame
get est similaire à celui des dictionnaires python.