python - seleccionar - rename columns pandas
Cómo verificar si existe una columna en Pandas (3)
Esto funcionará:
if ''A'' in df:
Pero para mayor claridad, probablemente lo escribiría como:
if ''A'' in df.columns:
¿Hay alguna forma de comprobar si existe una columna en un marco de datos de Pandas?
Supongamos que tengo el siguiente 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
y quiero calcular df[''sum''] = df[''A''] + df[''C'']
pero primero quiero verificar si df[''A'']
existe, y si no, quiero calcular df[''sum''] = df[''B''] + df[''C'']
lugar.
Gracias por la ayuda.
Para verificar si una o más columnas existen todas, puede usar set.issubset
, como en:
if set([''A'',''C'']).issubset(df.columns):
df[''sum''] = df[''A''] + df[''C'']
Como @brianpck señala en un comentario, set([])
puede construirse alternativamente con llaves:
if {''A'', ''C''}.issubset(df.columns):
Vea esta pregunta para una discusión sobre la sintaxis de llaves.
O bien, puede usar una lista de comprensión, como en:
if all([item in df.columns for item in [''A'',''C'']]):
Solo para sugerir otra forma sin usar sentencias if, puede usar el método get()
para DataFrame
. Para realizar la suma según la pregunta:
df[''sum''] = df.get(''A'', df[''B'']) + df[''C'']
El método de obtención de DataFrame
tiene un comportamiento similar al de los diccionarios de Python.