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
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
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
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
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)