No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Recursos

Join Es otra herramienta para hacer exactamente lo mismo, una combinación. La diferencia es que join va a ir a los índices y no a columnas específicas.

izq = pd.DataFrame({'A': ['A0','A1','A2'],
  'B':['B0','B1','B2']},
  index=['k0','k1','k2'])

der =pd.DataFrame({'C': ['C0','C1','C2'],
  'D':['D0','D1','D2']},
  index=['k0','k2','k3']) 
  • Combinamos izq con der
izq.join(der)
---> A  B   C   D
k0  A0  B0  C0  D0
k1  A1  B1  nan nan
k2  A2  B2  C1  D1
  • Traer todos los datos aunque no hagan match.
izq.join(der, how = 'outer')
---> A  B   C   D
k0  A0  B0  C0  D0
k1  A1  B1  nan nan
k2  A2  B2  C1  D1
k3  nan nan C2  D2

Pregunta:

En temas de performance y velocidad, ¿cuál es mejor el Merge o el Join, cuando se trata de miles de registros?
@gustavomp, Platzinauta

Respuesta:
join suele ser mejor
@alarcon7a, Profe Platzi

Contribución creada por: Edward Giraldo.

Aportes 25

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Diccionarios ocupados en esta clase 😄

izq = pd.DataFrame({'A': ['A0','A1','A2'],
  'B':['B0','B1','B2']},
  index=['k0','k1','k2'])

der =pd.DataFrame({'C': ['C0','C1','C2'],
  'D':['D0','D1','D2']},
  index=['k0','k2','k3']) 

¿Cuál es la principal diferencia entre merge y join en pandas?

  • Merge puede unificar df en base a los índices o a los valores de las columnas.
  • Join solo lo puede hacer en base a los índices. Es una caso específico de merge.

Ya estamos en la recta final, ánimos! 😀

Este artículo explica el merge, join y concatenar comparando sus diferencias.
https://realpython.com/pandas-merge-join-and-concat/

El “rigth” deberia ser considerada palabra reservada! 😄

Información resumida de esta clase
#EstudiantesDePlatzi

  • Join a diferencia del merge, utilizará los índices de nuestros DataFrame para realizar el match y no a las columnas

  • También utilizamos el parámetro how para definir el tipo de unión que se va a realizar

Un aporte, hay que tener en cuanta siempre cual va a ser tu dataframe principal para unirlo o relacionarlo con otros, recordar que en sql hay reglas (uno - varios, p eje)

Mi código de hoy:

##Join - index match
data_frame_izq_04= pd.DataFrame({'A':['A0','A1','A2'],
'B':['B0','B1','B2']}, index= ['k0','k1','k2'])

data_frame_der_04= pd.DataFrame({'C':['C0','C1','C2'],
'D':['D0','D1','D2']}, index= ['k0','k2','k3'])

print(f'joining: \n {data_frame_izq_04.join(data_frame_der_04)}')
print(f'joining by inner: \n {data_frame_izq_04.join(data_frame_der_04, how= "inner")}')
print(f'joining by left: \n {data_frame_izq_04.join(data_frame_der_04, how= "left")}')
print(f'joining by right: \n {data_frame_izq_04.join(data_frame_der_04, how= "right")}')
print(f'joining by outer: \n {data_frame_izq_04.join(data_frame_der_04, how= "outer")}')

trabajando con join


Join Es otra herramienta para hacer exactamente lo mismo, una combinación. La diferencia es que join va a ir a los índices y no a columnas específicas.
________________________________________
[3]
0 s
import  pandas as pd
import numpy as np
________________________________________
[2]
0 s
izq = pd.DataFrame({'A': ['A0','A1','A2'],
  'B':['B0','B1','B2']},
  index=['k0','k1','k2'])

der =pd.DataFrame({'C': ['C0','C1','C2'],
  'D':['D0','D1','D2']},
  index=['k0','k2','k3']) 
________________________________________
[4]
izq.join(der)
#esta va directamente hacia los índices Combinamos izq con der
________________________________________
[5]
izq.join(der,how="inner")
#index a nivel de math trae solo dos filas del dataframe 
________________________________________
[7]
0 s
izq.join(der,how="left")
________________________________________
[8]
0 s
izq.join(der,how="right")
________________________________________
[9]
izq.join(der,how="outer")
#aca respeta los join pero sin importa en que posicion se encuentre completando los datos con nan 
________________________________________
join proporciona una estructura muy parecida a marge, al igual es para combinar dataframe pero lo hace directamente con el index


1. **Concatenación (concat):** * La concatenación se utiliza para unir DataFrames o Series a lo largo de un eje existente. Puedes concatenar objetos a lo largo de las filas o columnas. * No realiza ninguna alineación basada en columnas; simplemente apila los datos uno encima del otro o uno al lado del otro. * Es útil para combinar conjuntos de datos que tienen las mismas columnas y estructura, pero diferentes filas. 2. **Unión (join):** * La operación de unión se utiliza para combinar DataFrames basándose en las etiquetas de índice o columnas comunes. * Las uniones son similares a las operaciones SQL JOIN y permiten combinar dos o más DataFrames en función de una o más columnas clave. * Las uniones se utilizan para combinar información de diferentes DataFrames que comparten una relación común. 3. **Fusión (merge):** * La fusión es similar a la unión, pero es específica de pandas. Es una forma más poderosa de combinar DataFrames, ya que permite una mayor flexibilidad en la especificación de cómo se realizará la fusión. * Puedes fusionar DataFrames en función de múltiples columnas y especificar el tipo de unión (interna, externa, izquierda, derecha) y cómo se manejarán los valores faltantes. * La fusión es especialmente útil cuando se trabaja con datos complejos y se requiere un control preciso sobre cómo se combinan los DataFrames.

Here’s a breakdown of factors to consider:

  • Dataset size: For small datasets, numpy join might be slightly faster, but the difference is negligible. For large datasets, pandas.merge is usually faster due to its optimized algorithms.
  • Join type: Simple inner joins might be faster with numpy, while pandas.merge shines with its flexibility for left, right, outer joins, etc.
  • Data alignment: Ensuring proper data alignment is crucial for numpy join performance. pandas.merge can handle misaligned data automatically.
  • Missing data: pandas.merge handles missing data gracefully, while numpy join requires manual handling, potentially impacting performance.
  • Code complexity: pandas.merge offers a high-level abstraction, making code cleaner and easier to maintain. Numpy join requires more low-level manipulation, increasing code complexity.

 
Según Bard

join es tipo iloc y merge es tipo loc

El parámetro on hace referencia a las llaves o keys (en SQL), para que hagan una relación entre los diferentes dataframes. Es opcional, si no se especifica y ‘left_index’ y ‘right_index’ son ‘False’, entonces las columnas que compartan el mismo nombre se utilizarán como llaves.

Es increible lo que se puede aprender en data-science. Si que el camino es muy largo pero al final la recompensa sera buena.

Cuando se trata de miles de registros y se busca maximizar el rendimiento y la velocidad en una base de datos, la elección entre Merge y Join depende en gran medida del sistema de gestión de base de datos específico que estés utilizando, así como de la estructura de tus datos y del tipo de consulta que estés ejecutando. En general, en el contexto de bases de datos relacionales, el término "join" se refiere a la combinación de filas de dos o más tablas en función de un campo común, mientras que "merge" puede referirse a la operación de combinar conjuntos de datos en función de una columna común. Algunos sistemas de gestión de bases de datos tienen optimizaciones específicas para operaciones de "join" que pueden hacer que sean más eficientes para ciertos tipos de consultas. Por otro lado, "merge" puede ser más eficiente en otros contextos, especialmente cuando se trabaja con grandes conjuntos de datos que necesitan ser combinados de manera eficiente. Para obtener la mejor respuesta a tu pregunta, sería útil conocer el sistema de gestión de base de datos que estás usando y los detalles específicos de la consulta que estás realizando. Sin esa información, la respuesta más precisa sería que la elección entre Merge y Join depende de la estructura de tus datos, el sistema de gestión de bases de datos que estés utilizando y las consultas específicas que deseas llevar a cabo.


join es muy útil, y me parece que con el atributo outer es más completa la concatenación:

izq.join(der, how='outer')

Recomiendo que revisen lsuffix y rsuffix esta en la documentación que esta adjuntado en esta clase sirve cuando tengamos datos de cantidad diferentes y tener una mejor visualización del dataframe por indexación.

izq = pd.DataFrame({'A':['A0','A1','A2'],
'B':['B0','B1','B2']},
index =['K0','K1','K2'])

der = pd.DataFrame({'C':['C0','C1','C2'],
'D':['D0','D1','D2']},
index = ['K0','K2','K3'])
izq.join(der,how='inner')

Mis apuntes #22 (Notion)

![](https://static.platzi.com/media/user_upload/imagen-da89e02d-7a3b-499f-9fae-cbcea1525fc8.jpg) El escrito en el notebook lo explica. he intentado especificae el Index i el SOrt, y empeoran más las cosas. ¿Alguien tiene alguna idea de cómo arreglar este error? De antemano, Gracias.