tacosdedatos

Cover image for La notación de brackets en Pandas
Antonio Feregrino
Antonio Feregrino

Posted on • Updated on

La notación de brackets en Pandas

Por el amor de todo lo que quieras, no hagas esto: frame.columna para acceder a las columnas de un DataFrame. ¿Por qué? ... la respuesta se reduce a un concepto: consistencia.

Para ver si te puedo convencer, vamos a ver las desventajas de la notación punto:

Asignación de columnas

Si tratas de crear una nueva columna, no la puedes asignar con ..

Esto no añade una nueva columna al data frame:

frame.columna = True
Enter fullscreen mode Exit fullscreen mode

En su lugar le añade una propiedad al data frame gracias al monkeypatching una característica de Python.

En el mejor de los casos te dar cuenta mientras realizas tu análisis, sin embargo esta posibilidad de añadir propiedades al vuelo puede causar errores catastróficos en producción.

Entonces, vas a terminar usando frame["columna"] = True para añadir una nueva columna.

Colisión de nombres

No es nada improbable que te encuentres con un dataset que contenga una columna llamada empty. Y ¿pues qué crees? los data frames de pandas tienen una propiedad llamada empty, lo cual significa que no puedes usar la notación . para acceder a la columna, puesto que con esto:

frame.empty
Enter fullscreen mode Exit fullscreen mode

Lo único que estás haciendo es revisando si tu data frame está vacío o no. Un argumento similar se puede decir de otras propiedades: head, size, shape, copy, items, tail, mask, mod, combine, eval, mean, mode, median, min, max, rank, duplicated, first, last... que si te pones a pensar, son nombres comunes para columnas en un dataset.

Entonces, vas a terminar usando frame["empty"] para evitar colisiones con propiedades o métodos de los data frames.

Errores de sintaxis

Similar al punto anterior, si tratas de acceder a una columna llamada class:

frame.class
Enter fullscreen mode Exit fullscreen mode

Obtendrás un error de sintaxis.

O, piensa en el caso de nombres de columna con espacios en ellos, son solo otro error de sintaxis esperando a suceder.

Entonces, vas a terminar usando frame["class"] para evitar errores de sintaxis.

Columnas dinámicas

Ni hablar de que es con los [] que puedes aprovechar realmente todo el poder del lenguaje de programación, por ejemplo, así es que puedes iterar sobre las columnas de un data frame:

for column in ["age", "width", "height"]:
   frame[f"pet_{column}"] += 1
Enter fullscreen mode Exit fullscreen mode

Algo que con el . sería imposible de realizar.

En conclusión

Como te habrás dado cuenta, vas a tener que usar los brackets dentro de tu código, así que lo mejor es ser consistente y usar la misma notación en todo el código de tu análisis, la consistencia es una de las necesidades primarias a la hora de escribir software.

La notación de los [] siempre funciona, no importa si la columna tiene espacios, o se llama igual que una propiedad del data frame, o si es que la columna a la que quieres acceder no tiene nombre.

Ni hablar de que de que la sintaxis de . puede causar confusión con otros programadores que no estén tan familiarizados con la sintaxis de pandas, las propiedades del estilo .propiedad son ampliamente por todos y todas las pythonistas.

Te invito a que me sigas en Twitter, por si quieres ver otros trucos antes de que los expanda en un post aquí en tacos de datos.

Discussion (0)