3. Uniones de DataFrames (`merge` y `concat`)

pandas/pandas-parte8
@Lautaroff 24-03-2025

En el análisis de datos, es común disponer de múltiples DataFrames que debemos unir o concatenar para obtener una vista completa de la información. En este capítulo exploraremos dos funciones fundamentales de pandas para combinar datos: merge() y concat(). Se mostrarán ejemplos prácticos con DataFrames ajustados para ilustrar de forma clara cada caso.


3.1 merge(): Unir DataFrames basados en columnas comunes

La función merge() combina DataFrames usando una o más columnas como clave de unión. El parámetro how define la estrategia para combinar filas que tienen o no coincidencias en las tablas involucradas.

Ejemplo Base

Supongamos que tenemos dos DataFrames:

import pandas as pd

# DataFrame de empleados
df_empleados = pd.DataFrame({
    'ID': [1, 2, 3, 4],
    'Nombre': ['Ana', 'Luis', 'Carlos', 'Marta']
})

# DataFrame de salarios
df_salarios = pd.DataFrame({
    'ID': [1, 2, 5],
    'Salario': [3000, 3500, 4000]
})

Tipos de Unión con merge()

1. inner: Solo las coincidencias en ambas tablas

Se mantienen únicamente las filas cuyo valor en la clave (ID) aparece en ambos DataFrames.

inner_merge = pd.merge(df_empleados, df_salarios, on='ID', how='inner')
print(inner_merge)

Salida:

   ID Nombre  Salario
0   1    Ana     3000
1   2   Luis     3500

2. left: Mantiene todos los datos de la tabla izquierda

Todas las filas de df_empleados se conservan. Para aquellas filas sin coincidencia en df_salarios, se asigna NaN al campo Salario.

left_merge = pd.merge(df_empleados, df_salarios, on='ID', how='left')
print(left_merge)

Salida:

   ID  Nombre  Salario
0   1     Ana   3000.0
1   2    Luis   3500.0
2   3  Carlos      NaN
3   4   Marta      NaN

3. right: Mantiene todos los datos de la tabla derecha

Todas las filas de df_salarios se conservan. Si un ID no se encuentra en df_empleados, se asignan NaN a la columna Nombre.

right_merge = pd.merge(df_empleados, df_salarios, on='ID', how='right')
print(right_merge)

Salida:

   ID  Nombre  Salario
0   1     Ana   3000.0
1   2    Luis   3500.0
2   5     NaN   4000.0

4. outer: Mantiene todos los datos de ambos DataFrames

Se unen todas las filas de ambos DataFrames. Donde no haya coincidencias se rellenan los valores faltantes con NaN.

outer_merge = pd.merge(df_empleados, df_salarios, on='ID', how='outer')
print(outer_merge)

Salida:

   ID  Nombre  Salario
0   1     Ana   3000.0
1   2    Luis   3500.0
2   3  Carlos      NaN
3   4   Marta      NaN
4   5     NaN   4000.0

3.2 concat(): Concatenar DataFrames

La función concat() se utiliza para apilar DataFrames vertical u horizontalmente, sin necesidad de especificar una columna clave. Es útil cuando deseas unir conjuntos de datos que tienen la misma estructura o cuando quieres adjuntar columnas adicionales.

Ejemplo de Concatenación Vertical

Imaginemos que recibimos nuevos registros de empleados en un DataFrame adicional:

df_nuevos = pd.DataFrame({
    'ID': [5, 6],
    'Nombre': ['Pedro', 'Sofía']
})

# Concatenación vertical: se agregan nuevas filas
df_concatenado = pd.concat([df_empleados, df_nuevos], ignore_index=True)
print(df_concatenado)

Salida:

   ID  Nombre
0   1     Ana
1   2    Luis
2   3  Carlos
3   4   Marta
4   5   Pedro
5   6   Sofía

Ejemplo de Concatenación Horizontal

Si tenemos DataFrames con información complementaria y queremos unir sus columnas:

# DataFrame con datos de contacto (asumimos que el orden de las filas coincide)
df_contacto = pd.DataFrame({
    'Telefono': ['555-1234', '555-5678', '555-8765', '555-4321']
})

# Concatenación horizontal: se unen columnas
df_concatenado_horizontal = pd.concat([df_empleados, df_contacto], axis=1)
print(df_concatenado_horizontal)

Salida:

   ID  Nombre  Telefono
0   1     Ana  555-1234
1   2    Luis  555-5678
2   3  Carlos  555-8765
3   4   Marta  555-4321

Nota: Al concatenar horizontalmente, asegúrate de que el orden o el índice de los DataFrames coincida para evitar asignar datos incorrectos.


Conclusión

Estas herramientas son esenciales para la preparación y estructuración de datos en pandas, facilitando el análisis y la integración de información de diversas fuentes.

Lección Anterior Curso Siguiente Lección