Come verificare se esiste una colonna in Panda


274

C'è un modo per verificare se esiste una colonna in un DataFrame Pandas?

Supponiamo che io abbia il seguente 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 voglio calcolare df['sum'] = df['A'] + df['C']

Ma prima voglio verificare se df['A']esiste e, in caso contrario, voglio calcolare df['sum'] = df['B'] + df['C']invece.

Risposte:


586

Questo funzionerà:

if 'A' in df:

Ma per chiarezza, probabilmente lo scriverei come:

if 'A' in df.columns:

2
viceversa si potrebbe usare: if not 'A' in df.columns:per eseguire un'operazione se Anon è presente indf
Robvh

81

Per verificare l' esistenza di una o più colonne, è possibile utilizzare set.issubset, come in:

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

Come sottolinea @brianpck in un commento, in set([])alternativa può essere costruito con parentesi graffe,

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

Vedi questa domanda per una discussione sulla sintassi delle parentesi graffe.

In alternativa, puoi utilizzare la comprensione di un elenco, come in:

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

11
O semplicemente{'A', 'B'}.issubset()
brianpck l'

7

Solo per suggerire un altro modo senza usare le istruzioni if, puoi usare il get()metodo per DataFrames. Per eseguire la somma in base alla domanda:

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

Il DataFramemetodo get ha un comportamento simile ai dizionari Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.