Paola Alapizco
Hanns Maza
gracias
Dayana Castillo
muchas gracias :3
Combinar datos de múltiples tablas es esencial para integrar información de diferentes fuentes en el análisis de datos. Pandas ofrece funciones como merge(), concat() y join() que facilitan esta tarea de manera eficiente y flexible.
A continuación, exploraremos cómo utilizar estas funciones con ejemplos prácticos que te ayudarán a dominar la combinación de DataFrames en tus proyectos de análisis de datos.
¿Cómo se utiliza la función merge()?
La función merge() en Pandas permite combinar DataFrames de manera similar a las uniones en SQL, basándose en una o más claves comunes.
Unión Interna (Inner Join)
Combina solo las filas con claves coincidentes en ambos DataFrames.
import pandas as pd # Crear DataFrames de ejemplo df1 = pd.DataFrame({ 'key': ['A', 'B', 'C'], 'value1': [1, 2, 3] }) df2 = pd.DataFrame({ 'key': ['B', 'C', 'D'], 'value2': [4, 5, 6] }) # Realizar un merge interno inner_merged = pd.merge(df1, df2, on='key', how='inner') print("Unión Interna:\n", inner_merged)
Unión Externa (Outer Join)
Incluye todas las filas de ambos DataFrames, rellenando con NaN donde no haya coincidencias.
# Realizar un merge externo outer_merged = pd.merge(df1, df2, on='key', how='outer') print("Unión Externa:\n", outer_merged)
Unión Izquierda (Left Join)
Devuelve todas las filas del DataFrame izquierdo y las filas coincidentes del DataFrame derecho.
# Realizar un merge izquierda left_merged = pd.merge(df1, df2, on='key', how='left') print("Unión Izquierda:\n", left_merged)
Unión Derecha (Right Join)
Devuelve todas las filas del DataFrame derecho y las filas coincidentes del DataFrame izquierdo.
# Realizar un merge derecha right_merged = pd.merge(df1, df2, on='key', how='right') print("Unión Derecha:\n", right_merged)
¿Cómo se aplica la función concat()?
La función concat() se usa para concatenar DataFrames a lo largo de un eje, ya sea apilándolos verticalmente o combinándolos horizontalmente.
Concatenación Vertical
Apila los DataFrames uno sobre otro de forma vertical.
# Crear DataFrames de ejemplo df3 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'] }) df4 = pd.DataFrame({ 'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5'] }) # Concatenar verticalmente vertical_concat = pd.concat([df3, df4]) print("Concatenación Vertical:\n", vertical_concat)
Concatenación Horizontal
Combina los DataFrames uno al lado del otro.
# Concatenar horizontalmente horizontal_concat = pd.concat([df3, df4], axis=1) print("Concatenación Horizontal:\n", horizontal_concat)
¿Cómo funciona la función join()?
La función join() permite combinar DataFrames en función del índice o una columna clave, similar a merge(), pero más simplificado para uniones basadas en índices.
Join con Índice
Combina DataFrames utilizando el índice como la clave de unión.
# Crear DataFrames de ejemplo con índices df5 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'] }, index=['K0', 'K1', 'K2']) df6 = pd.DataFrame({ 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2'] }, index=['K0', 'K2', 'K3']) # Realizar un join joined = df5.join(df6, how='inner') print("Join con Índice:\n", joined)
Paola Alapizco
Hanns Maza
gracias
Dayana Castillo
muchas gracias :3
La fusión de **DataFrames** en **Pandas** es una operación clave para combinar datos de diferentes fuentes, similar a las uniones de tablas en SQL. Se puede realizar de diferentes maneras, dependiendo de cómo deseas combinar los conjuntos de datos. Las funciones principales para fusionar son merge(), join(), y concat().
### 1. **merge() para fusionar DataFrames**
El método merge() es el más común para fusionar dos **DataFrames** basándose en una o más columnas o índices en común. Ofrece varias opciones de tipo de unión (join), como **inner**, **outer**, **left**, y **right**.
#### Tipos de uniones:
- **Inner join**: Devuelve solo las filas que tienen correspondencias en ambos DataFrames.
- **Left join**: Devuelve todas las filas del DataFrame izquierdo y solo las que coinciden del DataFrame derecho.
- **Right join**: Devuelve todas las filas del DataFrame derecho y solo las que coinciden del DataFrame izquierdo.
- **Outer join**: Devuelve todas las filas de ambos DataFrames, completando con NaN donde no haya correspondencias.
#### Ejemplo básico de merge():
import pandas as pd \# Crear dos DataFrames de ejemplo df1 = pd.DataFrame({   'id': \[1, 2, 3, 4],   'nombre': \['Ana', 'Pedro', 'Juan', 'Lucía'] }) df2 = pd.DataFrame({   'id': \[3, 4, 5, 6],   'ciudad': \['Madrid', 'Sevilla', 'Valencia', 'Barcelona'] }) \# Fusión usando la columna 'id' df\_merged = pd.merge(df1, df2, on='id', how='inner') print(df\_merged)
**Resultado (inner join):**
  id nombre ciudad 0 3 Juan Madrid 1 4 Lucía Sevilla
#### Otros tipos de uniones:
- **Left join**:
df\_left = pd.merge(df1, df2, on='id', how='left') print(df\_left)
**Resultado:**
  id nombre ciudad 0 1 Ana NaN 1 2 Pedro NaN 2 3 Juan Madrid 3 4 Lucía Sevilla
- **Right join**:
df\_right = pd.merge(df1, df2, on='id', how='right') print(df\_right)
**Resultado:**
  id nombre ciudad 0 3 Juan Madrid 1 4 Lucía Sevilla 2 5 NaN Valencia 3 6 NaN Barcelona
- **Outer join**:
df\_outer = pd.merge(df1, df2, on='id', how='outer') print(df\_outer)
**Resultado:**
  id nombre ciudad 0 1 Ana NaN 1 2 Pedro NaN 2 3 Juan Madrid 3 4 Lucía Sevilla 4 5 NaN Valencia 5 6 NaN Barcelona
### 2. **Fusión en base a múltiples columnas**
También puedes fusionar DataFrames basándote en más de una columna.
#### Ejemplo:
df1 = pd.DataFrame({   'id': \[1, 2, 3, 4],   'nombre': \['Ana', 'Pedro', 'Juan', 'Lucía'],   'ciudad': \['Madrid', 'Sevilla', 'Valencia', 'Barcelona'] }) df2 = pd.DataFrame({   'id': \[3, 4, 5, 6],   'ciudad': \['Valencia', 'Barcelona', 'Madrid', 'Sevilla'],   'ventas': \[200, 150, 300, 400] }) \# Fusión usando tanto 'id' como 'ciudad' df\_multi\_merge = pd.merge(df1, df2, on=\['id', 'ciudad'], how='inner') print(df\_multi\_merge)
**Resultado:**
  id nombre ciudad ventas 0 3 Juan Valencia 200 1 4 Lucía Barcelona 150
### 3. **concat() para concatenar DataFrames**
El método concat() se utiliza para apilar DataFrames uno encima del otro (unión vertical) o uno al lado del otro (unión horizontal).
#### Concatenación vertical (por filas):
\# Crear dos DataFrames de ejemplo df1 = pd.DataFrame({   'id': \[1, 2],   'nombre': \['Ana', 'Pedro'] }) df2 = pd.DataFrame({   'id': \[3, 4],   'nombre': \['Juan', 'Lucía'] }) \# Concatenar los DataFrames por filas df\_concat = pd.concat(\[df1, df2], axis=0) print(df\_concat)
**Resultado:**
  id nombre 0 1 Ana 1 2 Pedro 0 3 Juan 1 4 Lucía
#### Concatenación horizontal (por columnas):
\# Crear dos DataFrames de ejemplo con el mismo número de filas df3 = pd.DataFrame({   'edad': \[25, 30],   'ciudad': \['Madrid', 'Barcelona'] }) \# Concatenar por columnas df\_concat\_cols = pd.concat(\[df1, df3], axis=1) print(df\_concat\_cols)
**Resultado:**
  id nombre edad ciudad 0 1 Ana 25 Madrid 1 2 Pedro 30 Barcelona
### 4. **join() para combinar DataFrames basados en el índice**
El método join() se utiliza para combinar DataFrames usando sus índices en lugar de una columna específica. Esto es útil cuando ya tienes índices bien definidos en los DataFrames.
#### Ejemplo:
\# Crear dos DataFrames con índices df1 = pd.DataFrame({   'nombre': \['Ana', 'Pedro'],   'edad': \[25, 30] }, index=\['A', 'B']) df2 = pd.DataFrame({   'ciudad': \['Madrid', 'Barcelona'],   'ventas': \[100, 200] }, index=\['A', 'B']) \# Hacer join usando el índice df\_join = df1.join(df2) print(df\_join)
**Resultado:**
  nombre edad ciudad ventas A Ana 25 Madrid 100 B Pedro 30 Barcelona 200
#### Usando join() con diferentes índices:
Si los índices no coinciden, puedes usar el argumento how para especificar el tipo de unión (por defecto es left).
df3 = pd.DataFrame({   'ciudad': \['Sevilla', 'Valencia'],   'ventas': \[150, 250] }, index=\['C', 'D']) df\_join\_outer = df1.join(df3, how='outer') print(df\_join\_outer)
**Resultado:**
  nombre edad ciudad ventas A Ana 25.0 Madrid 100.0 B Pedro 30.0 Barcelona 200.0 C NaN NaN Sevilla 150.0 D NaN NaN Valencia 250.0
### Resumen de funciones:
- **merge()**: Fusiona dos DataFrames basado en columnas comunes, con soporte para diferentes tipos de uniones (inner, outer, left, right).
- **concat()**: Concatenación de DataFrames por filas (vertical) o columnas (horizontal).
- **join()**: Combina DataFrames usando índices, con soporte para diferentes tipos de uniones.
Estas operaciones son útiles para consolidar datos de diferentes fuentes y reorganizar la información de manera eficiente. Si tienes algún caso específico o necesitas más detalles, ¡déjame saber!
Aquí están los seis DataFrames:
df1 = pd.DataFrame({
'key': ['A', 'B', 'C'],
'value1': [1,2,3]
})
df2 = pd.DataFrame({
'key': ['B', 'C', 'D'],
'value2': [4,5,6]
})
df3 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
})
df4 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
})
df5 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index = ['K0', 'K1', 'K2'])
df6 = pd.DataFrame({
'C': ['C0', 'C1', 'C2'],
'D': ['DO', 'D1', 'D2']
}, index = ['K0', 'K2', 'K3'])
Daniel Humberto Ortiz Vargas
el codigo que deja esta clase en los archivos no esta acorde a lo practicadpo
FABIAN PEREZ
Jorge Luis García González
jaja!! me pasa exactamente lo mismo!!!
Hector Puentes
El merge me recordo mucho a las operaciones que se hacen con conjuntos
Gabriel Obregón
1. Creación de DataFrames de Ejemplo
df1 = pd.DataFrame({
'key': ['A', 'B', 'C'],
'value1': [1, 2, 3]
})
df2 = pd.DataFrame({
'key': ['B', 'C', 'D'],
'value2': [4, 5, 6]
})
print(df1)
print(df2)
Descripción:
Resultado: df1:
key value1
0 A 1
1 B 2
2 C 3
df2:
key value2
0 B 4
1 C 5
2 D 6
2. Inner Join
inner_merged = pd.merge(df1, df2, on='key', how='inner')
print(inner_merged)
Descripción:
Resultado:
key value1 value2
0 B 2 4
1 C 3 5
3. Outer Join
outer_merged = pd.merge(df1, df2, on='key', how='outer')
print(outer_merged)
Descripción:
Resultado:
key value1 value2
0 A 1.0 NaN
1 B 2.0 4.0
2 C 3.0 5.0
3 D NaN 6.0
4. Left Join
left_merged = pd.merge(df1, df2, on='key', how='left')
print(left_merged)
Descripción:
Resultado:
key value1 value2
0 A 1 NaN
1 B 2 4.0
2 C 3 5.0
5. Right Join
right_merged = pd.merge(df1, df2, on='key', how='right')
print(right_merged)
Descripción:
Resultado:
key value1 value2
0 B 2.0 4
1 C 3.0 5
2 D NaN 6
6. Concatenación Vertical
vertical_concat = pd.concat([df3, df4])
print(vertical_concat)
Descripción:
Resultado:
A B
0 A0 B0
1 A1 B1
2 A2 B2
0 A3 B3
1 A4 B4
2 A5 B5
7. Concatenación Horizontal
horizontal_concat = pd.concat([df3, df4], axis=1)
print(horizontal_concat)
Descripción:
Resultado:
A B A B
0 A0 B0 A3 B3
1 A1 B1 A4 B4
2 A2 B2 A5 B5
8. Operación Join
joined = df5.join(df6, how='inner')
print(joined)
Descripción:
Resultado:
A B C D
K0 A0 B0 C0 D0
K2 A2 B2 C1 D1
Juan David Lozada Calderon
Gracias por las informaciones, pero hubiese sido mucho mejor con usos en dataFrames.
Marina Barraza
La fusión de DataFrames en pandas es un proceso esencial para combinar datos de diferentes fuentes en un solo DataFrame. Este proceso es crucial en la manipulación de datos y en el análisis porque permite integrar información dispersa para un análisis más completo.
Marina Barraza
Mis Apuntes:
Importancia de la Fusión de DataFrames
Jhon Alexander Mosquera Vanegas
Al fusionar tablas, la pregunta de fondo no es cómo se escribe la instrucción, sino qué filas se está dispuesto a perder. Según la clase, la unión interna deja solo las llaves que coinciden en ambos data frames, mientras que la externa conserva todas y rellena con NaN donde no hay coincidencia. Un caso típico sería cruzar dos fuentes oficiales con códigos que no coinciden del todo: con la unión interna, las diferencias desaparecen en silencio; con la externa, se vuelven visibles. Por eso, cuando la calidad de la fuente importa, conviene empezar por la externa y revisar los NaN.
Saul Antonio Cerén Gálvez
import pandas as pd
# --- 1. PREPARACIÓN DE DATOS (Simulando mi Retail) ---
ventas_enero = pd.DataFrame({
'ID_Ticket': [101, 102],
'ID_Prod': ['A', 'B'],
'Cantidad': [2, 1]
})
ventas_febrero = pd.DataFrame({
'ID_Ticket': [103, 104],
'ID_Prod': ['A', 'C'],
'Cantidad': [5, 2]
})
catalogo_productos = pd.DataFrame({
'ID_Prod': ['A', 'B', 'C'],
'Nombre': ['Leche', 'Pan', 'Huevo'],
'Precio': [1.50, 1.00, 0.10]
})
# --- 2. APLICANDO CONCAT (Unir meses) ---
# Queremos un solo reporte de ventas del año
df_total_ventas = pd.concat([ventas_enero, ventas_febrero], ignore_index=True)
print("--- Resultado de CONCAT (Ventas unidas) ---")
print(df_total_ventas, "\n")
# --- 3. APLICANDO MERGE (Cruzar con catálogo) ---
# Queremos saber el nombre y precio de lo que se vendió
df_final = pd.merge(df_total_ventas, catalogo_productos, on='ID_Prod', how='left')
print("--- Resultado de MERGE (Ventas con info de producto) ---")
print(df_final, "\n")
# --- 4. APLICANDO JOIN (Info extra por índice) ---
# Imagina que tienes metas de venta por ID de Producto
metas = pd.DataFrame({'Meta_Mes': [100, 150, 200]}, index=['A', 'B', 'C'])
# Para usar Join, el DataFrame principal debe tener el ID como índice
df_con_metas = catalogo_productos.set_index('ID_Prod').join(metas)
print("--- Resultado de JOIN (Catálogo con metas) ---")
print(df_con_metas)
import pandas as pd
# --- 1. PREPARACIÓN DE DATOS (Simulando mi Retail) ---
ventas_enero = pd.DataFrame({
'ID_Ticket': [101, 102],
'ID_Prod': ['A', 'B'],
'Cantidad': [2, 1]
})
ventas_febrero = pd.DataFrame({
'ID_Ticket': [103, 104],
'ID_Prod': ['A', 'C'],
'Cantidad': [5, 2]
})
catalogo_productos = pd.DataFrame({
'ID_Prod': ['A', 'B', 'C'],
'Nombre': ['Leche', 'Pan', 'Huevo'],
'Precio': [1.50, 1.00, 0.10]
})
# --- 2. APLICANDO CONCAT (Unir meses) ---
# Queremos un solo reporte de ventas del año
df_total_ventas = pd.concat([ventas_enero, ventas_febrero], ignore_index=True)
print("--- Resultado de CONCAT (Ventas unidas) ---")
print(df_total_ventas, "\n")
# --- 3. APLICANDO MERGE (Cruzar con catálogo) ---
# Queremos saber el nombre y precio de lo que se vendió
df_final = pd.merge(df_total_ventas, catalogo_productos, on='ID_Prod', how='left')
print("--- Resultado de MERGE (Ventas con info de producto) ---")
print(df_final, "\n")
# --- 4. APLICANDO JOIN (Info extra por índice) ---
# Imagina que tienes metas de venta por ID de Producto
metas = pd.DataFrame({'Meta_Mes': [100, 150, 200]}, index=['A', 'B', 'C'])
# Para usar Join, el DataFrame principal debe tener el ID como índice
df_con_metas = catalogo_productos.set_index('ID_Prod').join(metas)
print("--- Resultado de JOIN (Catálogo con metas) ---")
print(df_con_metas)
Alexander Ramirez
Por suerte estos métodos ya los conozco gracias a que trabajo con PLSQL de Oracle jaja
FABIAN PEREZ
Esta clase se facilita mucho si ya tienes conocimientos previos en bases de datos
Cristian Rodríguez
En los DataFrames de Pandas, los nombres de las columnas deben ser únicos para evitar confusiones al acceder a los datos. Sin embargo, los índices pueden no ser únicos; puedes tener índices duplicados, lo cual puede complicar ciertas operaciones. Es recomendable tener índices únicos para facilitar la manipulación y análisis de datos. Esto se relaciona con la importancia de la organización y limpieza de datos, un aspecto clave en el análisis de datos que se ha tratado en tu curso.
Esteban Diaz Diez
Si alguien se confundió aquí y no ha estudiado SQL, revise los JOIN en SQL, eso lo guiará muy bien. Es pura teoría de conjuntos.
Glenda López
Cuando se utilizan joins en Pandas y hay columnas coincidentes, el resultado dependerá del tipo de join que se esté utilizando:
Estos métodos permiten combinar datos de manera efectiva.
Juan Felipe Hernandez Giraldo
El on='key' especifica la columna 'key' que se usará para buscar coincidencias entre df1 y df2. El how='inner' indica que solo se incluirán las filas donde hay coincidencias en ambas tablas, es decir, sólo las filas que tienen el mismo valor en la columna 'key'. Esto resulta en un DataFrame que combina datos de ambos DataFrames solo para las claves coincidentes.
Roberto Arriaga
La plataforma es excelente y la maestra también, pero el curso parece hecho con miedo, con desconfianza a los alumnos; si va a haber este mismo curso en nivel dos, entonces entendería... igual hay varios "errorcitos" a lo largo del curso"
Les dejo los DataFrames que la profesora utiliza en la clase:
# Ejercicios con merge() df1 = pd.DataFrame({ 'key': ['A', 'B', 'C'], 'value1': [1,2,3] }) df2 = pd.DataFrame({ 'key': ['B', 'C', 'D'], 'value2': [4,5,6] }) # Ejercicios con concat() df3 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], }) df4 = pd.DataFrame({ 'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5'], }) # Ejercicios con join() df5 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'] }, index = ['K0', 'K1', 'K2'] ) df6 = pd.DataFrame({ 'C': ['C0', 'C1', 'C2'], 'D': ['DO', 'D1', 'D2'] }, index = ['K0', 'K2', 'K3'] )
Espero este aporte les sea de ayuda 💚.