pandas

Pandas

Tutorial Pandas: Operaciones matemáticas y estadísticas

Aprende a utilizar Pandas para realizar operaciones matemáticas y estadísticas avanzadas, incluyendo métodos de agregación, agrupación y tablas pivotantes.

Métodos de agregación y resumen

Los métodos de agregación y resumen en Pandas permiten obtener estadísticas descriptivas y realizar operaciones resumidas sobre los datos. Estos métodos son fundamentales para el análisis exploratorio y la manipulación de datos. 

A continuación, se describen algunos de los métodos más utilizados:

  • sum(): Calcula la suma de los valores a lo largo del eje especificado (por defecto, a lo largo de las filas si no se especifica un eje). Este método es útil para obtener la suma total de una columna numérica en un DataFrame o una Serie.
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

suma_columna_A = df['A'].sum()
# Resultado: 6
  • mean(): Calcula la media aritmética de los valores a lo largo del eje especificado. La media es una medida de la tendencia central que muestra el valor promedio de los datos. Es útil para obtener una visión general del nivel promedio de los datos.
media_columna_A = df['A'].mean()
# Resultado: 2.0
  • median(): Calcula la mediana de los valores a lo largo del eje especificado. La mediana es el valor que divide los datos ordenados en dos partes iguales, siendo menos sensible a valores atípicos que la media.
mediana_columna_A = df['A'].median()
# Resultado: 2.0
  • min(): Encuentra el valor mínimo a lo largo del eje especificado. Es útil para identificar el valor más bajo dentro de un conjunto de datos, lo que puede ser importante para la detección de límites inferiores en análisis de datos.
minimo_columna_A = df['A'].min()
# Resultado: 1
  • max(): Encuentra el valor máximo a lo largo del eje especificado. Similar a min(), este método es útil para identificar el valor más alto en un conjunto de datos, destacando los picos en los valores.
maximo_columna_A = df['A'].max()
# Resultado: 3
  • count(): Cuenta el número de valores no nulos a lo largo del eje especificado. Este método es particularmente útil para evaluar la cantidad de datos válidos presentes en una columna o en todo el DataFrame.
cuenta_columna_A = df['A'].count()
# Resultado: 3
  • std(): Calcula la desviación estándar de los valores a lo largo del eje especificado. La desviación estándar es una medida de la dispersión o variabilidad de los datos respecto a la media. Es fundamental para entender cuán dispersos están los valores en un conjunto de datos.
desviacion_estandar_columna_A = df['A'].std()
# Resultado: 1.0
  • var(): Calcula la varianza de los valores a lo largo del eje especificado. La varianza mide la dispersión de los datos elevando al cuadrado la desviación de cada dato respecto a la media, proporcionando una visión más amplificada de la variabilidad.
varianza_columna_A = df['A'].var()
# Resultado: 1.0
  • describe(): Genera estadísticas descriptivas que resumen la tendencia central, la dispersión y la forma de la distribución de un conjunto de datos. Este método proporciona una visión rápida y completa del resumen estadístico de las columnas de un DataFrame.
descripcion_df = df.describe()
# Resultado: DataFrame con estadísticas descriptivas de cada columna
  • quantile(): Calcula el valor en el cuantil especificado (por defecto, el 50%, que es la mediana). Es útil para dividir los datos en partes iguales y analizar la distribución relativa de los datos.
cuantil_columna_A = df['A'].quantile(0.75)
# Resultado: 2.5
  • cumsum(): Calcula la suma acumulada de los valores a lo largo del eje especificado. La suma acumulada es útil en análisis de series temporales para ver la evolución de una suma a lo largo del tiempo.
suma_acumulada_columna_A = df['A'].cumsum()
# Resultado: Serie con valores acumulados
  • cumprod(): Calcula el producto acumulado de los valores a lo largo del eje especificado. Este método es particularmente útil para cálculos financieros o científicos donde se necesita evaluar el crecimiento multiplicativo en una serie de datos.
producto_acumulado_columna_A = df['A'].cumprod()
# Resultado: Serie con productos acumulados

Estos métodos se pueden aplicar tanto a series como a dataframes. Es posible especificar el eje sobre el cual se aplican las operaciones, utilizando el parámetro axis (0 para filas y 1 para columnas). Además, algunos métodos aceptan parámetros adicionales que permiten ajustar su comportamiento, como skipna para ignorar valores nulos.

suma_filas = df.sum(axis=1)
# Resultado: Serie con la suma de cada fila

Los métodos de agregación y resumen son esenciales para realizar análisis preliminares y obtener información rápida sobre los datos. Utilizarlos adecuadamente permite identificar patrones, tendencias y posibles anomalías en los conjuntos de datos.

Agrupación de datos para agregaciones complejas

La agrupación de datos en Pandas es una técnica avanzada que permite segmentar un conjunto de datos en subconjuntos, realizar operaciones de agregación específicas en cada uno de estos subconjuntos y, finalmente, combinar los resultados en una estructura de datos coherente. Esta técnica es fundamental para realizar análisis detallados y complejos, especialmente cuando se trabaja con grandes volúmenes de datos. 

A continuación se describen los conceptos y métodos clave para realizar agrupaciones y agregaciones complejas en Pandas.

El método principal para agrupar datos en Pandas es groupby(). Este método segmenta el DataFrame en grupos basados en uno o más criterios y permite aplicar funciones de agregación a cada grupo. 

La estructura básica para usar groupby() es la siguiente:

import pandas as pd

df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
    'B': ['one', 'one', 'two', 'two', 'one', 'one'],
    'C': [1, 2, 3, 4, 5, 6],
    'D': [2.5, 3.5, 4.5, 5.5, 6.5, 7.5]
})

grupo_A = df.groupby('A')

Después de agrupar el DataFrame, se pueden aplicar varias funciones de agregación para obtener estadísticas o realizar operaciones sobre cada grupo. Algunas de las funciones de agregación más utilizadas son sum(), mean(), count(), min(), max(), entre otras. Por ejemplo:

suma_por_grupo = grupo_A.sum()
# Resultado: DataFrame con la suma de cada columna para cada grupo en 'A'

Para realizar agregaciones más complejas, se puede usar el método agg(), que permite aplicar múltiples funciones de agregación a diferentes columnas. Por ejemplo:

agregaciones_complejas = grupo_A.agg({
    'C': ['sum', 'mean'],
    'D': ['min', 'max']
})
# Resultado: DataFrame con sum y mean para la columna 'C' y min y max para la columna 'D'

Además de las funciones de agregación estándar, es posible definir funciones personalizadas y aplicarlas a los grupos. Esto se puede hacer usando apply() o transform()

Por ejemplo, para crear una función que calcule el rango de una columna:

def rango(x):
    return x.max() - x.min()

rango_por_grupo = grupo_A['C'].apply(rango)
# Resultado: Serie con el rango de la columna 'C' para cada grupo en 'A'

Pandas también permite agrupar por múltiples columnas, lo que facilita realizar análisis más detallados. Por ejemplo:

grupo_A_B = df.groupby(['A', 'B']).sum()
# Resultado: DataFrame con la suma de cada columna para cada combinación de grupos en 'A' y 'B'

Para mejorar la legibilidad de los resultados, se puede utilizar el método reset_index() para convertir los índices jerárquicos en columnas normales:

grupo_A_B_reset = grupo_A_B.reset_index()
# Resultado: DataFrame con los índices jerárquicos convertidos en columnas

La función de agrupación en Pandas es muy flexible y permite realizar operaciones avanzadas y complejas de manera eficiente. Al combinar groupby() con otras funciones y métodos de Pandas, se pueden obtener insights detallados y precisos sobre los datos, lo cual es esencial para el análisis y la manipulación de datos a gran escala.

Tablas pivotantes

Las tablas pivotantes en Pandas son una herramienta esencial para reorganizar y resumir grandes conjuntos de datos de manera eficiente. Utilizando la función pivot_table(), se pueden transformar datos en una tabla de resumen que permite observar patrones y relaciones más fácilmente. La función pivot_table() es muy flexible y admite múltiples opciones de configuración para adaptarse a diferentes necesidades analíticas.

La estructura básica de una tabla pivotante se define mediante los parámetros index, columns y values, que especifican las dimensiones y las métricas de la tabla. 

A continuación, se muestra un ejemplo sencillo para ilustrar su uso:

import pandas as pd

df = pd.DataFrame({
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'],
    'B': ['one', 'one', 'two', 'two', 'one', 'one'],
    'C': [1, 2, 3, 4, 5, 6],
    'D': [2.5, 3.5, 4.5, 5.5, 6.5, 7.5]
})

tabla_pivotante = df.pivot_table(values='D', index='A', columns='B', aggfunc='mean')
# Resultado: DataFrame con la media de 'D' para cada combinación de 'A' y 'B'

El parámetro aggfunc en el ejemplo anterior especifica la función de agregación que se aplicará a los datos. Pandas soporta varias funciones de agregación, como mean, sum, min, max, entre otras. También es posible utilizar funciones de agregación personalizadas.

Para agregar múltiples métricas en la tabla pivotante, se puede pasar una lista al parámetro values:

tabla_pivotante_multiple = df.pivot_table(values=['C', 'D'], index='A', columns='B', aggfunc='sum')
# Resultado: DataFrame con la suma de 'C' y 'D' para cada combinación de 'A' y 'B'

Además, es posible manejar datos faltantes en la tabla pivotante utilizando los parámetros fill_value y dropna. El parámetro fill_value permite especificar un valor para reemplazar los datos faltantes, mientras que dropna elimina las entradas con todos los valores nulos:

tabla_pivotante_con_relleno = df.pivot_table(values='D', index='A', columns='B', aggfunc='mean', fill_value=0)
# Resultado: DataFrame con la media de 'D' y los valores nulos reemplazados por 0

Para un mayor control sobre las agregaciones, se puede usar el parámetro margins, que añade totales de fila y columna a la tabla pivotante:

tabla_pivotante_con_totales = df.pivot_table(values='D', index='A', columns='B', aggfunc='mean', margins=True)
# Resultado: DataFrame con la media de 'D' y totales de fila y columna

Cuando se trabaja con múltiples índices y columnas, las tablas pivotantes pueden ser más complejas. A continuación, se muestra un ejemplo de cómo crear una tabla pivotante con múltiples índices:

df_multi = pd.DataFrame({
    'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
    'B': ['one', 'one', 'two', 'one', 'one', 'two'],
    'C': ['small', 'large', 'small', 'small', 'large', 'small'],
    'D': [1, 2, 3, 4, 5, 6],
    'E': [2.5, 3.5, 4.5, 5.5, 6.5, 7.5]
})

tabla_pivotante_multi = df_multi.pivot_table(values='E', index=['A', 'B'], columns='C', aggfunc='mean')
# Resultado: DataFrame con la media de 'E' para cada combinación de 'A' y 'B' y 'C'

Las tablas pivotantes son una herramienta poderosa para resumir y analizar datos. Su flexibilidad permite realizar operaciones complejas de agregación y reorganización de manera eficiente, facilitando la obtención de insights valiosos a partir de grandes conjuntos de datos.

Certifícate en Pandas con CertiDevs PLUS

Ejercicios de esta lección Operaciones matemáticas y estadísticas

Evalúa tus conocimientos de esta lección Operaciones matemáticas y estadísticas con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Pandas

Accede a todas las lecciones de Pandas y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Pandas

Supera todos los ejercicios de programación del curso de Pandas y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Utilizar métodos de agregación y resumen como sum(), mean(), median(), min(), max(), count(), std(), var() y describe().

  • Aplicar métodos de agrupación como groupby() para realizar agregaciones complejas.

  • Crear y manipular tablas pivotantes usando pivot_table() para analizar datos.

  • Implementar funciones de agregación personalizadas y aplicar funciones utilizando apply() y transform().

  • Gestionar datos faltantes en las operaciones de resumen y agrupación.