DataFrame (Pandas) (I)
Colecciones de datos
Un DataFrame es una estructura de datos bidimensional (organizada en filas y columnas) similar a una tabla de base de datos, una hoja de cálculo o una matriz. Es el objeto fundamental para la manipulación y análisis de datos en programación, especialmente en bibliotecas como Pandas (Python).
Los datos de cada columna pueden ser de distinto tipo (pero los de la misma columna han de ser del mismo), lo que le otorga gran flexibilidad, y dispone de índices por filas y por columnas, lo que le proporciona un funcionamiento eficiente en cuanto al acceso, el filtrado de datos y su alineación. Además es posible realizar operaciones vectorizadas, lo que nos permite aplicar transformaciones, filtros y cálculos matemáticos a columnas completas de forma eficiente sin necesidad de recurrir a bucles explícitos. En todas estas características se hace notar la influencia de los array de NumPy, base sobre la que se diseñó la librería Pandas y el concepto de DataFrame en Python (1).
La creación de un DataFrame (2) puede partir de la transformación de colecciones de datos nativas de Python como, por ejemplo, a partir de un diccionario cuyos valores son listas de datos:
import pandas as pd
# Creacción del diccionario
datos = {
'Nombre': ['Ana', 'Carlos', 'Elena', 'David'],
'Edad': [4, 6, 8, 10],
'Centro': ['CP San Tirso', 'Col. Donato Barato', 'CP Sevilla', 'CP Luna LLena'],
'Madre': ['María', 'Rosana', 'Carlota', 'Venancia']
}
# Conversión de diccionario a DataFrame
df = pd.DataFrame(datos)
Primero importamos la biblioteca Pandas con el alias que es costumbre import pandas as pd y después de crear el diccionario datos lo convertimos en una DataFrame df = pd.DataFrame(datos). A partir de aquí podemos realizar diferentes operaciones con el DataFrame creado haciendo uso de instrucciones Python y de otras específicas de Pandas.
Por ejemplo, podemos mostar el contenido del DataFrame en el CMD mediante print(df), obteniendo...
También podemos incrementar el contenido en ambas estructuras (diccionario y DataFrame), comprobando de paso las diferencias en el manejo de ambas estructuras.
# ==================================================
# PROCEDIMIENTO A: Añadir "registro" al DICCIONARIO
# ===================================================
# Al tratarse de un diccionario de listas, hay que añadir cada elemento clave a clave en su lista correspondiente.
datos['Nombre'].append('Lucas')
datos['Edad'].append(5)
datos['Centro'].append('CP San Tirso')
datos['Madre'].append('Laura')
print("Diccionario actualizado:")
print(datos)
print("--------------------------")
# =================================================
# PROCEDIMIENTO B: Añadir "registro" al DATAFRAME
# =================================================
# Los DataFrames de Pandas son estructuras inmutables en tamaño sobre la memoria de NumPy.
# A partir de Pandas 2.0+, la forma de añadir una fila es crear un mini-DataFrame y concatenarlo mediante pd.concat().
nuevo_df = pd.DataFrame([{
'Nombre': 'Lucas',
'Edad': 5,
'Centro': 'CP San Tirso',
'Madre': 'Laura'
}])
df = pd.concat([df, nuevo_df], ignore_index=True)
print("DataFrame actualizado:")
print(df)
print("--------------------------")
También podemos ejecutar diferentes modificaciones en el mismo, como, por ejemplo...
# 1. Selección de columnas
nombres = df['Nombre']
centros_y_madres = df[['Centro', 'Madre']]
# 2. Filtrado por condición (operación vectorizada)
# Alumnos mayores de 6 años (Elena y David)
mayores_de_6 = df[df['Edad'] > 6]
# Alumnos del colegio "CP San Tirso"
san_tirso = df[df['Centro'] == 'CP San Tirso']
# 3. Creación y modificación de columnas (operación vectorizada)
# Calcular el año de nacimiento estimado
df['Año_Nacimiento'] = 2026 - df['Edad']
# Indicador booleano para etapa infantil (menores o iguales a 5 años)
df['Es_Infantil'] = df['Edad'] <= 5
# 4. Agregación y resumen de datos
edad_promedio = df['Edad'].mean()
... que realizan las modificaciones y cálculos explicados en los comentarios, pero que no se muestran en pantalla al faltar las instrucciones print() que dejo de tu mano. Una vez realizadas estas modificaciones, lo lógico es guardar el DataFrame modificado para poder utilizarlo más adelante. Para ello es suficiente con implementar al final del script el código siguiente (3)
# Guardar el DataFrame en la ruta especificada
df.to_csv("D:/datos/mi_df.csv", index=False, encoding='utf-8')
print("DataFrame guardado correctamente en D:/datos/mi_df.csv")
print("--------------------------")
1 Pandas es una librería diseñada en 2008 por Wes McKinney, quien construyó la arquitectura del DataFrame para que usara las ventajas de bajo nivel de NumPy.
2 Lo frecuente es trabajar con archivos ya creados (tablas en hojas de datos o archivos CSV), pero en esta entrada nos limitaremos a la transformación de colecciones de datos insertas en el script.
3 La ruta donde se guardar realmente queda de tu mano, por lo que deberás modificar la instrucción "D:/datos/mi_df.csv" de
df.to_csv("D:/datos/mi_df.csv", index=False, encoding='utf-8'). Observa que el DataFrame se guarda como archivo csv. Finalmente, mediante index=False evitamos que se guarde la columna del índice numérico (0, 1, 2, 3)