Filtrar uniones

Unir datos con pandas

Aaren Stubberfield

Instructor

Uniones mutantes frente a uniones filtradas

Uniones mutantes:

  • Combina datos de dos tablas basándose en observaciones coincidentes en ambas tablas.

Filtrar uniones:

  • Filtrar las observaciones de la tabla en función de si coinciden o no con una observación de otra tabla.
Unir datos con pandas

¿Qué es una unión parcial?

Diagrama de tabla de semi unión en el que los resultados provienen de la intersección

Uniones parciales

  • Devuelve la intersección, similar a una combinación interna.
  • Devuelve solo las columnas de la tabla izquierda y no la derecha.
  • Sin duplicados
Unir datos con pandas

Conjunto de datos musicales

Imagen de un teléfono con auriculares

Imagen del tutorial de SQLite

1 Foto de Vlad Bagacian de Pexels.
Unir datos con pandas

Ejemplos de conjuntos de datos

  gid  name           
0 1    Rock           
1 2    Jazz           
2 3    Metal          
3 4    Alternative ...
4 5    Rock And Roll  
  tid  name             aid  mtid  gid  composer         u_price
0 1    For Those Ab...  1    1     1    Angus Young,...  0.99   
1 2    Balls to the...  2    2     1    nan              0.99   
2 3    Fast As a Shark  3    2     1    F. Baltes, S...  0.99   
3 4    Restless and...  3    2     1    F. Baltes, R...  0.99   
4 5    Princess of ...  3    2     1    Deaffy & R.A...  0.99
Unir datos con pandas

Paso 1: unión parcial

genres_tracks = genres.merge(top_tracks, on='gid')
print(genres_tracks.head())
  gid  name_x  tid   name_y           aid  mtid  composer         u_price
0 1    Rock    2260  Don't Stop M...  185  1     Mercury, Fre...  0.99   
1 1    Rock    2933  Mysterious Ways  232  1     U2               0.99   
2 1    Rock    2618  Speed Of Light   212  1     Billy Duffy/...  0.99   
3 1    Rock    2998  When Love Co...  237  1     Bono/Clayton...  0.99   
4 1    Rock    685   Who'll Stop ...  54   1     J. C. Fogerty    0.99
Unir datos con pandas

Paso 2: unión parcial

genres['gid'].isin(genres_tracks['gid'])

Imagen de 2 columnas de gid que se unirán

Unir datos con pandas

Paso 2: unión parcial

genres['gid'].isin(genres_tracks['gid'])
0     True
1     True
2     True
3     True
4    False
Name: gid, dtype: bool
Unir datos con pandas

Paso 3: unión parcial

genres_tracks = genres.merge(top_tracks, on='gid')
top_genres = genres[genres['gid'].isin(genres_tracks['gid'])]
print(top_genres.head())
  gid  name           
0 1    Rock           
1 2    Jazz           
2 3    Metal          
3 4    Alternative & Punk
4 6    Blues
Unir datos con pandas

¿Qué es una antiunión?

Diagrama de tabla de unión parcial donde los resultados provienen de la tabla izquierda menos la intersección

Antiunión

  • Devuelve la tabla izquierda, excluyendo la intersección.
  • Devuelve solo las columnas de la tabla izquierda y no la derecha.
Unir datos con pandas

Paso 1: antiunión

genres_tracks = genres.merge(top_tracks, on='gid', how='left', indicator=True)
print(genres_tracks.head())
  gid  name_x           tid     name_y           aid    mtid  composer         u_price  _merge   
0 1    Rock             2260.0  Don't Stop M...  185.0  1.0   Mercury, Fre...  0.99     both  
1 1    Rock             2933.0  Mysterious Ways  232.0  1.0   U2               0.99     both  
2 1    Rock             2618.0  Speed Of Light   212.0  1.0   Billy Duffy/...  0.99     both  
3 1    Rock             2998.0  When Love Co...  237.0  1.0   Bono/Clayton...  0.99     both 
4 5    Rock And Roll    NaN     NaN              NaN    NaN   NaN              NaN      left_only
Unir datos con pandas

Paso 2: antiunión

gid_list = genres_tracks.loc[genres_tracks['_merge'] == 'left_only', 'gid']
print(gid_list.head())
23     5
34     9
36    11
37    12
38    13
Name: gid, dtype: int64
Unir datos con pandas

Paso 3: antiunión

genres_tracks = genres.merge(top_tracks, on='gid', how='left', indicator=True)
gid_list = genres_tracks.loc[genres_tracks['_merge'] == 'left_only','gid']
non_top_genres = genres[genres['gid'].isin(gid_list)]

print(non_top_genres.head())
  gid  name          
0 5    Rock And Roll 
1 9    Pop           
2 11   Bossa Nova    
3 12   Easy Listening
4 13   Heavy Metal
Unir datos con pandas

¡Vamos a practicar!

Unir datos con pandas

Preparing Video For Download...