¿Hay una manera más sofisticada de hacer

if numpy.all(map(lambda c: c in df.columns, ['Column 1', 'Columns 2'])):
    do_something()
5
Hendrik Wiese 28 jun. 2016 a las 10:43

4 respuestas

La mejor respuesta

Puede usar Index.isin:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

Si es necesario, marque al menos un valor usando any

cols = ['A', 'B']
print (df.columns.isin(cols).any())
True

cols = ['W', 'B']
print (df.columns.isin(cols).any())
True

cols = ['W', 'Z']
print (df.columns.isin(cols).any())
False

Si es necesario, marque los valores de all :

cols = ['A', 'B', 'C','D','E','F']
print (df.columns.isin(cols).all())
True

cols = ['W', 'Z']
print (df.columns.isin(cols).all())
False
8
jezrael 28 jun. 2016 a las 08:01

El único problema con la respuesta dada (y tal vez funcione para el OP) es que prueba para ver si todas las columnas del marco de datos están en una lista dada, pero no todos los elementos de la lista en las columnas del marco de datos.

Mi solución fue:

test = all([ i in df.columns for i in ['A', 'B'] ])

Donde test es un simple True o False

0
elPastor 28 mar. 2018 a las 17:05

Puede acceder a las columnas en un índice de varias columnas con una tupla:

if ("key1", "key2") in df.columns:
    print("we have the column")
0
Edgar Ortega 29 jul. 2019 a las 14:28

Sé que es una publicación vieja ...

De esta respuesta:

if set(['Column 1', 'Column 2']).issubset(df.columns):
    do_something()

O un poco más elegante:

if {'Column 1', 'Column 2'}.issubset(df.columns):
    do_something()
3
nick 21 ene. 2019 a las 21:25