Cuando exploramos un dataset, lo primero que hacemos es generar resúmenes estadísticos que nos permitan entender la estructura y las características básicas de los datos.
El método .describe()
en Pandas genera automáticamente estadísticas descriptivas básicas para columnas numéricas:
👉 Para columnas categóricas (si se incluye include="object"
), devuelve:
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({
"Edad": np.random.randint(18, 70, 100),
"Ingreso": np.random.normal(8500, 2000, 100).round(0),
"Genero": np.random.choice(["M", "F"], 100)
})
print("Resumen de variables numéricas:\n")
print(df.describe(), "\n")
print("Resumen incluyendo categóricas:\n")
print(df.describe(include="object"))
Podemos limitar qué percentiles calcular o incluir más de uno.
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({
"Edad": np.random.randint(18, 70, 100),
"Ingreso": np.random.normal(8500, 2000, 100).round(0),
"Genero": np.random.choice(["M", "F"], 100)
})
resumen = df.describe(percentiles=[0.1, 0.25, 0.5, 0.75, 0.9])
print(resumen)
👉 Esto añade P10 y P90 al resumen.
El método .agg()
nos permite aplicar varias funciones estadísticas a la vez.
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({
"Edad": np.random.randint(18, 70, 100),
"Ingreso": np.random.normal(8500, 2000, 100).round(0),
"Genero": np.random.choice(["M", "F"], 100)
})
resumen_ingreso = df["Ingreso"].agg(["mean", "median", "std", "min", "max"])
print("Resumen de ingreso:\n", resumen_ingreso, "\n")
# Resumen sobre múltiples columnas
resumen_multiple = df.agg({
"Edad": ["mean", "min", "max"],
"Ingreso": ["mean", "median", "std"]
})
print("Resumen múltiple:\n", resumen_multiple)
👉 .agg()
es muy flexible: podemos aplicar funciones predefinidas, funciones lambda o nuestras propias funciones.
El dataset Iris contiene medidas de flores de tres especies (Setosa, Versicolor, Virginica).
import seaborn as sns
import pandas as pd
iris = sns.load_dataset("iris")
print("Primeras filas:\n", iris.head(), "\n")
print("Resumen general:\n", iris.describe(), "\n")
# Resumen agrupado por especie
resumen_por_especie = iris.groupby("species").agg({
"sepal_length": ["mean", "std"],
"sepal_width": ["mean", "std"],
"petal_length": ["mean", "std"],
"petal_width": ["mean", "std"]
})
print("Resumen por especie:\n", resumen_por_especie)
👉 Esto permite comparar diferencias estadísticas entre especies de flores.
El dataset Titanic (disponible en seaborn) contiene información sobre pasajeros: edad, sexo, clase, sobrevivencia, etc.
import seaborn as sns
import pandas as pd
titanic = sns.load_dataset("titanic")
print("Columnas:", titanic.columns, "\n")
print("Resumen de variables numéricas:\n", titanic.describe(), "\n")
print("Resumen de variables categóricas:\n", titanic.describe(include="object"), "\n")
# Resumen agrupado por clase y sexo
resumen_titanic = titanic.groupby(["class", "sex"]).agg({
"age": ["mean", "median"],
"fare": ["mean", "median", "std"],
"survived": ["mean"] # tasa de supervivencia
})
print("Resumen Titanic (clase + sexo):\n", resumen_titanic)
👉 Ejemplo de interpretación: podemos ver si los pasajeros de primera clase tenían mayor tasa de supervivencia que los de tercera.
.describe()
→ resumen rápido y flexible, ideal para exploración inicial..agg()
→ permite resúmenes personalizados y comparativos.