Pandas (V)

Antes de nada, el contexto, para esta serie de entradas se va a usar lo siguiente:

Y sin más preámbulos seguimos con esta quinta parte de la serie.

Unir (merge/join)

Pandas dispone de la función merge (documentación oficial) que permite ‘unir’ datos al estilo de como se hace con bases de datos relacionales (usando SQL). También se puede acceder al método merge disponible en las instancias a un Dataframe.

Por su parte, join es un método disponible en un DataFrame y sirve para hacer uniones de índices sobre índices o de índices sobre columnas. Las uniones que hace join las hace sobre los índices, en lugar de hacerlo sobre columnas comunes como se hace con merge. A ver si viendo los ejemplos queda un poco mejor este último párrafo y las diferencias entre join y merge.

Las uniones pueden ser uno-a-uno, muchos-a-uno o muchos-a-muchos.

Una unión uno-a-uno sería cuando unimos dos tablas (DataFrames) con índices únicos como hemos hecho en la entrega anterior con las concatenaciones.

En los anteriores ejemplos, datos1j es el resultado de unir los datos datos2 a los datos datos1 en todos los índices comunes que tienen ambos teniendo solo en cuenta el rango de índices definido en datos1. Si algún dato en datos2 no tiene un índice presente en datos1 se rellenará con un NaN. Con datos2j sucede lo mismo que con datos1j lo que el índice que tiene relevancia ahora es el perteneciente a datos2j. No sé si habrá quedado más o menos claro.

Ahora vamos a unir pero usando la palabra clave how que nos permite decir como se van a tener en cuenta los índices. Normalmente le pasaremos el parámetro outer o inner. El primero, outer, indica que los índices de los DataFrames se unen como en una unión de conjuntos, el segundo, inner, une los índices como si hiciéramos una intersección de conjuntos. Veamos un par de ejemplos para que se vea de forma práctica, el primero usando outer y el segundo usando inner:

Todo lo anterior se puede hacer también usando la función o método merge pero encuentro que es una forma un poco más rebuscada por lo que no la vamos a mostrar aquí ya que añade complejidad. Veremos usos de merge más adelante.

Ahora vamos a mostrar una unión muchos-a-uno. Estas uniones se hacen sobre una o más columnas como referencia, no a partir de índices, por lo que los valores contenidos pueden no ser únicos. Como siempre, vamos a ver un poco de código para ver si clarifica un poco más la teoría:

Estamos uniendo sobre los valores de la columna del DataFrame datos1 que presenta valores presentes en los índices del DataFrame datos2. En el anterior ejemplo hemos unido teniendo en cuenta una única columna, si queremos unir teniendo en cuenta varias columnas, el DataFrame que se le pase deberá presentar un MultiÍndice con tantos índices como columnas usemos (ver documentación sobre MultiÍndices y sobre unión con ellos).

Para hacer uniones de muchos-a-muchos usaremos merge que ofrece mayor libertad para poder hacer uniones de cualquier tipo (también las que hemos visto hasta ahora de uno-a-uno y de muchos-a-uno).
En el siguiente ejemplo vamos a hacer una unión de dos DataFrames usando merge y luego iremos explicando lo que hemos estado haciendo poco a poco para ver si se entiende un poco mejor.

Vemos que si hacemos una unión de la anterior forma, a cada valor de datos_dcha le ‘asocia’ cada uno de los valores de datos_izda que tengan la misma clave. En la siquiente celda de código vemos otro ejemplo de lo anterior un poco más completo teniendo en cuenta dos columnas de claves y usando el método outer de ‘unión’:

Otra vez hemos llegado al final. ¡¡Estad atentos a la última entrega!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

− four = three