Funciones avanzadas de Pandas

Pandas ofrece funciones de manipulación de datos muy potentes, adecuadas para tareas complejas de limpieza, análisis, agregación y procesamiento de series temporales. Dominar las funciones avanzadas de Pandas puede mejorar en gran medida la eficiencia del procesamiento y análisis de datos.


1. Combinación y unión de datos

Pandas proporciona varios métodos para combinar y unir diferentes DataFrames, comomerge()、concat()yjoin(). Estos métodos se utilizan a menudo para manejar múltiples conjuntos de datos y tareas de combinación complejas.

1. merge()— Unión estilo base de datos

merge()El método permite combinar dos DataFrames según ciertas columnas, similar a la operaciónJOINen SQL. Admite uniones internas, externas, izquierdas y derechas.

Parámetro Descripción
left DataFrame izquierdo
right DataFrame derecho
how Método de combinación, admite'inner', 'outer', 'left', 'right'
on Nombres de columnas para la unión (si los nombres de columna difieren entre ambos lados, se puede usarleft_onyright_on)
left_on Columna de unión del DataFrame izquierdo
right_on Columna de unión del DataFrame derecho
suffixes Añadir sufijos para distinguir nombres de columna duplicados

Ejemplo

import pandas as pd

# Datos de ejemplo
left = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
right = pd.DataFrame({'ID': [1, 2, 4], 'Age': [24, 27, 22]})

# Usar merge para una unión interna
result = pd.merge(left, right, on='ID', how='inner')
print(result)

Salida:

   ID     Name  Age
0   1    Alice   24
1   2      Bob   27

2. concat()— Concatenación a lo largo de un eje

concat()Se utiliza para concatenar múltiples DataFrames a lo largo de un eje especificado (filas o columnas), comúnmente para combinar filas (concatenación vertical) o combinar columnas (concatenación horizontal).

Parámetro Descripción
objs Lista de DataFrames que se deben combinar
axis Eje de concatenación,0indica combinar por filas,1indica combinar por columnas
ignore_index Si se ignora el índice y se regenera (por defecto esFalse)
keys Proporcionar un índice jerárquico para los objetos combinados

Ejemplo

import pandas as pd

# Datos de ejemplo
df1 = pd.DataFrame({'A': [1, 2, 3]})
df2 = pd.DataFrame({'A': [4, 5, 6]})

# Combinación por filas
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

Salida:

   A
0  1
1  2
2  3
3  4
4  5
5  6

3. join()— Unión basada en el índice

join()El método es una operación de unión simplificada en Pandas, generalmente utilizada para unir múltiples DataFrames basándose en el índice.

Parámetro Descripción
other Otro DataFrame que se debe unir
how Método de combinación, admite'left', 'right', 'outer', 'inner'
on Columna de unión utilizada; por defecto se basa en el índice

Ejemplo

import pandas as pd

# Datos de ejemplo
left = pd.DataFrame({'A': [1, 2, 3]}, index=[1, 2, 3])
right = pd.DataFrame({'B': [4, 5, 6]}, index=[1, 2, 4])

# Usar join para unir
result = left.join(right, how='inner')
print(result)

Salida:

   A  B
1  1  4
2  2  5

2. Tablas dinámicas y tablas cruzadas

Pandas proporciona el métodopivot_table()para crear tablas dinámicas, y el métodocrosstab()para calcular tablas cruzadas. Las tablas dinámicas y las tablas cruzadas son muy adecuadas para resumir y reorganizar datos.

1. pivot_table()— Crear una tabla dinámica

Parámetro Descripción
data Datos de entrada
values Columna a resumir
index Columna utilizada como índice de filas
columns Columna utilizada como índice de columnas
aggfunc Función de agregación, por defecto esmean, puede sersum, countesperar
fill_value Rellenar valores faltantes

Ejemplo

import pandas as pd

# Datos de ejemplo
data = {'Date': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'],
        'Category': ['A', 'B', 'A', 'B'],
        'Sales': [100, 150, 200, 250]}
df = pd.DataFrame(data)

# Crear una tabla dinámica
pivot_table = pd.pivot_table(df, values='Sales', index='Date', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)

Salida:

Category         A    B
Date                    
2024-01-01     100    0
2024-01-02       0  150
2024-01-03     200    0
2024-01-04       0  250

2. crosstab()— Crear una tabla cruzada

Parámetro Descripción
index Etiquetas de fila
columns Etiquetas de columna
values Datos utilizados para el cálculo (opcional)
aggfunc Función de agregación, por defectocount

Ejemplo

import pandas as pd

# Datos de ejemplo
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
        'Region': ['North', 'South', 'North', 'South', 'West', 'East']}
df = pd.DataFrame(data)

# Crear una tabla cruzada
cross_table = pd.crosstab(df['Category'], df['Region'])
print(cross_table)

Salida:

Region    East  North  South  West
Category                         
A           0      2      0     1
B           1      0      1     0

3. Aplicación de funciones personalizadas

Pandas proporciona varios métodos para aplicar funciones personalizadas, utilizados en la limpieza y transformación de datos.

1. apply()— Aplicar funciones a DataFrame o Series

apply()El método permite aplicar funciones personalizadas en DataFrame o Series, y admite operaciones por filas o columnas.

Parámetro Descripción
func Función que se debe aplicar
axis Por defecto es0, indica aplicar por columnas;1indica aplicar por filas
raw Si se pasan los datos originales (por defecto esFalse)
result_type Define el tipo de salida, comoexpand, reduce, broadcast

Ejemplo

import pandas as pd

# Datos de ejemplo
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [10, 20, 30, 40]})

# Definir una función personalizada
def custom_func(x):
    return x * 2

# Aplicar la función en las columnas
df['A'] = df['A'].apply(custom_func)
print(df)

Salida:

   A   B
0  2  10
1  4  20
2  6  30
3  8  40

2. applymap()— Aplicar funciones en todo el DataFrame

applymap()Solo se puede aplicar a DataFrame y actúa sobre cada elemento del DataFrame.

Parámetro Descripción
func Función que se debe aplicar

Ejemplo

import pandas as pd

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

# Aplicar una función personalizada en el DataFrame
df = df.applymap(lambda x: x ** 2)
print(df)

Salida:

   A  B
0  1  16
1  4  25
2  9  36

3. map()— Aplicar funciones a Series

map()Puede aplicar una función o una relación de mapeo a cada elemento de una Series.

Parámetro Descripción
arg Función a aplicar, diccionario o Series

Ejemplo

import pandas as pd

# Datos de ejemplo
df = pd.DataFrame({'A': ['cat', 'dog', 'rabbit']})

# Usar un diccionario para mapear
df['A'] = df['A'].map({'cat': 'kitten', 'dog': 'puppy'})
print(df)

Salida:

       A
0  kitten
1   puppy
2     NaN

4. Operaciones de agrupación y agregación

En Pandas, el métodogroupby()es muy potente; se puede utilizar para agrupar y agregar, transformar y filtrar datos. Mediantegroupby(), los datos se pueden agrupar según ciertas condiciones y realizar operaciones de agregación, como suma, media, conteo, etc.

1. groupby()— Agrupación de datos

Parámetro Descripción
by Según qué columna o índice agrupar
axis Eje de agrupación, por defecto es0, es decir, agrupar por filas
level Agrupar según el nivel del índice (adecuado para MultiIndex)

Ejemplo

import pandas as pd

# Datos de ejemplo
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40, 50, 60]
})

# Agrupar por la columna Category y calcular la suma de cada grupo
grouped = df.groupby('Category')['Value'].sum()
print(grouped)

Salida:

Category
A    90
B    120
Name: Value, dtype: int64

2. Operaciones de agregación (agg())

agg()Se utiliza para realizar operaciones de agregación complejas; se pueden pasar varias funciones para calcular múltiples valores agregados a la vez.

Parámetro Descripción
func Función de agregación, puede ser una cadena o una función personalizada

Ejemplo

import pandas as pd

# Datos de ejemplo
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [10, 20, 30, 40, 50, 60]
})

# Usar agg() para realizar múltiples operaciones de agregación
grouped = df.groupby('Category')['Value'].agg([sum, min, max])
print(grouped)

Salida:

          sum  min  max
Category                
A          90   10   50
B         120   20   60

5. Procesamiento de series temporales

Pandas proporciona potentes funciones de procesamiento de series temporales, incluyendo análisis de fechas, conversión de frecuencias, generación de rangos de fechas, operaciones de ventanas de tiempo, etc.

1. date_range()— Generar series temporales

Parámetros Descripción
start Fecha de inicio
end Fecha de fin
periods Número de puntos de tiempo generados
freq Frecuencia (comoDrepresenta días,Hrepresenta horas, etc.)

Ejemplo

import pandas as pd

# Generar series temporales
date_range = pd.date_range(start='2024-01-01', periods=5, freq='D')
print(date_range)

Salida:

DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[ns]', freq='D')

2. Desplazamientos de fecha y hora

Usarpd.Timedelta()permite realizar operaciones de suma y resta de tiempo.

Ejemplo

import pandas as pd

# Desplazamiento de fechas
date = pd.to_datetime('2024-01-01')
new_date = date + pd.Timedelta(days=10)
print(new_date)

Salida:

2024-01-11 00:00:00

3. Operaciones de ventana temporal (Rolling, Expanding)

Usarrolling()yexpanding()métodos para operaciones de ventanas móviles y expansivas, comúnmente utilizados en cálculos como medias móviles en series temporales.

Método Descripción
rolling() Calcula operaciones de ventana móvil, comúnmente usado para medias móviles, etc.
expanding() Calcula operaciones de ventana expansiva, valores acumulativos

Ejemplo

import pandas as pd

# Datos de ejemplo
df = pd.DataFrame({'Value': [10, 20, 30, 40, 50]})

# Calcular la media móvil de 3 días
df['Rolling_Mean'] = df['Value'].rolling(window=3).mean()
print(df)

Salida:

   Value  Rolling_Mean
0     10            NaN
1     20            NaN
2     30     20.000000
3     40     30.000000
4     50     40.000000

6. Manejo de valores faltantes

Pandas proporciona varios métodos para manejar valores faltantes (como NaN). Las operaciones comunes incluyen rellenar valores faltantes, eliminar valores faltantes, etc.

Método Descripción
isna() Comprueba valores faltantes, devuelve un valor booleano
fillna() Rellena valores faltantes
dropna() Elimina filas o columnas que contienen valores faltantes

Ejemplo

import pandas as pd
import numpy as np

# Datos de ejemplo
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8]
})

# Rellenar valores faltantes
df_filled = df.fillna(0)
print(df_filled)

Salida:

   A  B
0  1  5
1  2  0
2  0  7
3  4  8

7. Índice múltiple (MultiIndex)

Pandas proporciona la funcionalidad de índice múltiple (MultiIndex), que permite manejar estructuras de datos complejas en DataFrame o Series, especialmente adecuado para datos jerárquicos. Mediante el índice múltiple, podemos realizar operaciones como agrupación, selección, corte y agregación de datos.

1. Crear un índice múltiple

Se puede crear mediantepd.MultiIndex.from_tuples()、pd.MultiIndex.from_product()oset_index()métodos para crear un índice múltiple.

Método 1:pd.MultiIndex.from_tuples()

Utilice tuplas para crear un índice múltiple, cada tupla corresponde a un nivel de índice.

Parámetros Descripción
tuples Cada tupla corresponde a un valor de índice
names Nombre de cada nivel de índice (opcional)

Ejemplo

import pandas as pd

# Crear tuplas
index_tuples = [('A', 1), ('A', 2), ('B', 1), ('B', 2)]

# Crear índice múltiple
multi_index = pd.MultiIndex.from_tuples(index_tuples, names=['Letter', 'Number'])

# Crear DataFrame
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=multi_index)
print(df)

Salida:

               Value
Letter Number       
A      1          10
       2          20
B      1          30
       2          40

Método 2: pd.MultiIndex.from_product()

Utiliza el producto cartesiano de múltiples listas para crear un índice múltiple, adecuado para casos con muchas dimensiones de datos.

Parámetros Descripción
iterables Múltiples listas o matrices
names Nombre de cada nivel de índice (opcional)

Ejemplo

import pandas as pd

# Crear múltiples listas
index_values = [['A', 'B'], [1, 2]]

# Crear índice múltiple
multi_index = pd.MultiIndex.from_product(index_values, names=['Letter', 'Number'])

# Crear DataFrame
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=multi_index)
print(df)

Salida:

               Value
Letter Number       
A      1          10
       2          20
B      1          30
       2          40

Método 3: usarset_index()Crear un índice múltiple

set_index()El método puede convertir las columnas de un DataFrame en un índice múltiple, adecuado para crear un índice múltiple a partir de datos existentes.

Parámetros Descripción
keys Nombres de columnas utilizados como índice (pueden ser una o varias columnas)

Ejemplo

import pandas as pd

# Datos de ejemplo
data = {
    'Letter': ['A', 'A', 'B', 'B'],
    'Number': [1, 2, 1, 2],
    'Value': [10, 20, 30, 40]
}

df = pd.DataFrame(data)

# Configurar índice múltiple
df.set_index(['Letter', 'Number'], inplace=True)
print(df)

Salida:

               Value
Letter Number       
A      1          10
       2          20
B      1          30
       2          40

2. Operaciones con índices múltiples

1. Acceder a datos con índice múltiple

Se puede acceder a los datos mediante índices jerárquicos. A través deloc[]oxs()(cross-section) se puede realizar la selección de datos de manera conveniente.

Usarloc[]para seleccionar datos:

Ejemplo

import pandas as pd

# Datos de ejemplo
data = {
    'Letter': ['A', 'A', 'B', 'B'],
    'Number': [1, 2, 1, 2],
    'Value': [10, 20, 30, 40]
}

df = pd.DataFrame(data)

# Configurar índice múltiple
df.set_index(['Letter', 'Number'], inplace=True)

# Seleccionar la categoría 'A', todos los datos con 'Number' igual a 1
print(df.loc['A', 1])

Salida:

Value    10
Name: (A, 1), dtype: int64

Usarxs()para obtener datos cruzados:

xs()El método puede seleccionar cortes de niveles específicos en un índice múltiple.

Ejemplo

# Usar xs para obtener todos los datos con 'Number' igual a 1
print(df.xs(1, level='Number'))

Salida:

        Value
Letter       
A          10
B          30

2. Segmentación de índices múltiples

Pandas admite operaciones de corte en el índice múltiple, permitiendo seleccionar diferentes subconjuntos mediante niveles de índice.

Ejemplo

# Seleccionar todos los datos donde Letter sea 'A'
print(df.loc['A'])

Salida:

        Value
Number       
1          10
2          20

3. Ordenar índices múltiples

El métodosort_index()de Pandas permite ordenar el índice múltiple.

Ejemplo

# Ordenar por índice múltiple
df_sorted = df.sort_index(level=['Letter', 'Number'], ascending=[True, False])
print(df_sorted)

Salida:

               Value
Letter Number       
A      2          20
       1          10
B      2          40
       1          30

4. Operaciones de agregación

El índice múltiple combinado congroupby()puede realizar potentes operaciones de agregación, adecuado para el análisis estadístico de datos complejos.

Ejemplo

# Usar groupby para agregar el índice múltiple
df_grouped = df.groupby(['Letter', 'Number']).sum()
print(df_grouped)

Salida:

               Value
Letter Number       
A      1          10
       2          20
B      1          30
       2          40

5. Restablecer el índice

Se puede usarreset_index()para restablecer el índice múltiple a columnas normales.

Ejemplo

# Restablecer índice
df_reset = df.reset_index()
print(df_reset)

Salida:

  Letter  Number  Value
0      A       1     10
1      A       2     20
2      B       1     30
3      B       2     40

6. Valores faltantes en índices múltiples

Los valores faltantes en el índice múltiple se pueden manejar mediantefillna()odropna()de manera similar a los índices normales.

Ejemplo

# Introducir valores faltantes en los datos de ejemplo
data = {
    'Letter': ['A', 'A', 'B', 'B'],
    'Number': [1, 2, 1, 2],
    'Value': [10, None, 30, 40]
}

df = pd.DataFrame(data)
df.set_index(['Letter', 'Number'], inplace=True)

# Rellenar valores faltantes
df_filled = df.fillna(0)
print(df_filled)

Salida:

               Value
Letter Number       
A      1          10
       2           0
B      1          30
       2          40
Otras extensiones