No tienes acceso a esta clase

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

Combinando DataFrames

19/24
Recursos

Existen diferentes formas de fusionar dos DataFrames. Esto se hace a través de la lógica de combinación como se muestra a continuación:
Merge-join

  • Left join: Da prioridad al DataFrame de la izquierda. Trae siempre los datos de la izquierda y las filas en común con el DataFrame de la derecha.
  • Right join: Da prioridad al DataFrame de la derecha. Trae siempre los datos de la derecha y las filas en común con el DataFrame de la izquierda.
  • Inner join: Trae solamente aquellos datos que son común en ambos DataFrame
  • Outer join: Trae los datos tanto del DataFrame de la izquierda como el de la derecha, incluyendo los datos que comparten ambos.
description

Contribución creada por: Edward Giraldo.

Aportes 24

Preguntas 1

Ordenar por:

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

Combinando dataFrames

Existen diferentes formas de fusionar dos dataFrames. Esto se hace a traves de la lógica de combinación como se muestra a continuacion

  • Left join: da prioridad al dataFrame de la izquierda. Trae siempre los datos de la izquierda y las filas en comun con el dataFrame de la derecha.
  • Right join: da prioridad al dataFrame de la derecha. Trae siempre los datos de la derecha y las filas en comun con el dataFrame de la izquierda.
  • Inner join: Trae solamente aquellos datos que son común en ambos dataFrame
  • Outer join: Trae los datos tanto del dataFrame de la izquierda como el de la derecha incluyendo los datos que comparten ambos.
  • Concat - Axis 0: permite combinar dos dataframes a nivel de filas. Crecimiento vertical
  • Concat - Axis 1: permite combinar dos dataframes a nivel de columnas. La organizacion por columnas no va a ser la misma para ambos dataFrames, por tanto, se crearan valores NaN para rellenar los espacios vacios. Crecimiento horizontal

Mis apuntes #20

Left join

  • Supongan que queremos una tabla como tab_1, pero agregando votos electorales a cualquier estado que tengamos disponible. Para esto, usamos left_join con tab_1 como el primer argumento. Especificamos qué columna usar para que coincida con el argumento by.
left_join(tab_1, tab_2, by = "state")
#>        state population ev
#> 1    Alabama    4779736  9
#> 2     Alaska     710231  3
#> 3    Arizona    6392017 11
#> 4   Arkansas    2915918 NA
#> 5 California   37253956 55
#> 6   Colorado    5029196 NA

Right join

  • Si en lugar de una tabla con las mismas filas que la primera tabla, queremos una con las mismas filas que la segunda tabla, podemos usar right_join:
tab_1 %>% right_join(tab_2, by = "state")
#>         state population ev
#> 1     Alabama    4779736  9
#> 2      Alaska     710231  3
#> 3     Arizona    6392017 11
#> 4  California   37253956 55
#> 5 Connecticut         NA  7
#> 6    Delaware         NA  3

Inner join

  • Si queremos mantener solo las filas que tienen información en ambas tablas, usamos inner_join. Pueden pensar en esto como una intersección:
inner_join(tab_1, tab_2, by = "state")
#>        state population ev
#> 1    Alabama    4779736  9
#> 2     Alaska     710231  3
#> 3    Arizona    6392017 11
#> 4 California   37253956 
55

Full join

  • Si queremos mantener todas las filas y llenar las partes faltantes con NAs, podemos usar full_join. Pueden pensar en esto como una unión:
full_join(tab_1, tab_2, by = "state")
#>         state population ev
#> 1     Alabama    4779736  9
#> 2      Alaska     710231  3
#> 3     Arizona    6392017 11
#> 4    Arkansas    2915918 NA
#> 5  California   37253956 55
#> 6    Colorado    5029196 NA
#> 7 Connecticut         NA  7
#> 8    Delaware         NA  3

Semi join

  • La función semi_join nos permite mantener la parte de la primera tabla para la cual tenemos información en la segunda. No agrega las columnas de la segunda:
semi_join(tab_1, tab_2, by = "state")
#>        state population
#> 1    Alabama    4779736
#> 2     Alaska     710231
#> 3    Arizona    6392017
#> 4 California   37253956

Recordemos los conceptos de clase:

Left join: Da prioridad al DataFrame de la izquierda. Trae siempre los datos de la izquierda y las filas en común con el DataFrame de la derecha.
Right join: Da prioridad al DataFrame de la derecha. Trae siempre los datos de la derecha y las filas en común con el DataFrame de la izquierda.
Inner join: Trae solamente aquellos datos que son común en ambos DataFrame
Outer join: Trae los datos tanto del DataFrame de la izquierda como el de la derecha, incluyendo los datos que comparten ambos.

Muy buena explicación de los join visualizando el efecto en las tablas!

Información resumida de esta clase
#EstudiantesDePlatzi

  • Cuando combinamos 2 conjuntos de datos y utilizamos left join, esto quiere decir, que me traerá todos los datos que existan en el conjunto de la izquierda junto con la intersección entre los dos conjuntos

  • Cuando utilizamos rigth join, la prioridad está en el conjunto de la derecha, es decir, nos traerá todos los datos del conjunto de la derecha y los que se encuentren en la intersección de los conjuntos

  • Cuando utilizamos inner join solamente traerá los datos que existan en ambos conjuntos de datos

  • Cuando utilizamos outer join nos va a traer todos los datos que existan en los conjuntos de datos

  • En pandas utilizamos la función concat para unir algunos DataFrame, es importante saber que con esta función debemos definir los Axis

  • Si utlizamos el Axis=0 fusionamos por filas, si utilizamos el Axis=1 la fusión se realizará por columnas

En este artículo se compara el INNER JOIN, LEFT JOIN, RIGHT JOIN y OUTER JOIN de SQL y PANDAS.
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html

Que buena explicación 🙂🐼🐉

Es increible que se pueda usar las combinaciones de dataframe como si fueran tablas de sql y que estas nos permitan mejorar nuestra capacidad de ciencia de datos.

df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Age': [25, 30, 22]})

# Inner Join
inner_join = pd.merge(df1, df2, on='ID', how='inner')

# Left Join
left_join = pd.merge(df1, df2, on='ID', how='left')

# Right Join
right_join = pd.merge(df1, df2, on='ID', how='right')

# Full Outer Join
outer_join = pd.merge(df1, df2, on='ID', how='outer')

Notece que en ambas tablas, solo se tiene una columna en común, la cual sería el índice.

Cuando se tienen más de una fila con coincidencia, se complican un poco las cosas en mi experiencia.

Tu camiseta me trajo buenos recuerdos 🥲

Me parece que el ejemplo del Inner Join está mal, ya que solo trae los datos que tengan match, no debería unir las columnas Ay B con Cy D, de hecho no se podría hacer porque no tienen columnas en común

Concat-columnas

Concat-filas

Outer-join

Inner-join

Right-join

Left-join

Lógica de fusión