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:
- df_empleados: contiene información básica de empleados (ID y Nombre).
- df_salarios: contiene registros de salario (ID y Salario).
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
-
merge()
:- Se utiliza para unir DataFrames basándose en columnas clave.
- El parámetro
how
define el tipo de unión:inner
: Solo filas con coincidencias en ambas tablas.left
: Todas las filas del DataFrame izquierdo.right
: Todas las filas del DataFrame derecho.outer
: Todas las filas de ambos DataFrames.
-
concat()
:- Se utiliza para apilar DataFrames vertical u horizontalmente sin necesidad de una clave de unión.
- Es ideal cuando se trabaja con conjuntos de datos que tienen la misma estructura o cuando se quiere combinar información complementaria.
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.