Dos o más DataFrames pueden combinarse en otro DataFrame. La combinación puede ser de varias formas:
a) Concatenación: Combinación de varios DataFrames concatenando sus filas o columnas.
b) Mezcla: Combinación de varios DataFrames usando columnas o índices comunes.
Concatenación por filas. Las filas de los DataFrames se concatenan unas a continuación de las otras para formar el nuevo DataFrame. Para ello es necesario que los DataFrames que se combinen tengan el mismo índice de columnas.
Concatenación por columnas. Las columnas de los DataFrames se concatenan unas a continuación de las otras para formar el nuevo DataFrame. Para ello es necesario que los DataFrames que se combinen tengan el mismo índice de filas.
Para concatenar dos o más DataFrames se utiliza el siguiente método:
df.concat(dataframes, axis = eje): Devuelve el DataFrame que resulta de concatenar los DataFrames de la lista dataframes. Si axis = 0 (valor por defecto) la concatenación se realiza por filas, y si axis=1 se realiza por columnas.
Si los DataFrames que se concatenan por filas no tienen el mismo índice de columnas, el DataFrame resultante incluirá todas las columnas existentes en los DataFrames y rellenará con valores NaN los datos no disponibles. Si los DataFrames que se concatenan por columnas no tienen el mismo índice de filas, el DataFrame resultante incluirá todas las filas existentes en los DataFrames y rellenará con valores NaN los datos no disponibles.
La mezcla de DataFrames permite integrar filas de dos DataFrames que contienen información en común en una o varias columnas o índices que se conocen como clave.
Para mezclar dos DataFrames se utiliza el siguiente método:
df.merge(df1, df2, on = clave, how = tipo): Devuelve el DataFrame que resulta de mezclar el DataFrame df2 con el DataFrame df1, usando como claves las columnas de la lista clave y siguiendo el método de mezcla indicado por tipo.
El tipo de mezcla puede ser
"inner" (por defecto): El DataFrame resultante solo contiene las filas cuyos valores en la clave están en los dos DataFrames. Es equivalente a la intersección de conjuntos.
"outer": El DataFrame resultante contiene todas las filas de los dos DataFrames. Si una fila de un DataFrame no puede emparejarse con otra los mismos valores en la clave en el otro DataFrame, la fila se añade igualmente al DataFrame resultante rellenando las columnas del otro DataFrame con el valor NaN. Es equivalente a la unión de conjuntos.
"left": El DataFrame resultante contiene todas las filas del primer DataFrame y descarta las filas del segundo DataFrame que no pueden emparejarse con alguna fila del primer DataFrame a través de la clave.
"right": El DataFrame resultante contiene todas las filas del segundo DataFrame y descarta las filas del primer DataFrame que no pueden emparejarse con alguna fila del segundo DataFrame a través de la clave.
Práctica 6.1.
Dados los ficheros csv siguientes:
Cotización_Mod.csv. Presenta datos económicos de 32 empresas del IBEX35 de las 35 que hay.
3filas_cotización.csv. Presenta datos de las tres empresas del IBEX35 que faltan en la tabla anterior.
a. Crea dos DataFrames denominados DF1 [Cotizacion_Mod.csv], DF2 [3filas_cotizacion] e imprime en pantalla las 5 primeras filas de cada DF. Debería quedar más o menos como muestra la imagen.
b. Concatena en un DataFrame denominado DF3, las filas del DataFrame DF1 con el DataFrame DF2, imprime en pantalla el resultado. Se deberá ver como en la imagen de la abajo.
c. Crea un DataFrame DF4 con el fichero 2columnas_cotización.csv . Este fichero presenta datos añadidos, en dos columnas, de las 35 empresas del IBEX35. Imprime DF4. Quedaría como se muestra en la imagen inferior.
d) Concatena el DataFrame DF3 con del DataFrame DF4, para obtener el DataFrame DF5. Imprime en pantalla el resultado. Se verá como se muestra a continuación.
Como se ve en la imagen en lugar de las 35 filas (de las empresas del IBEX) esperadas aparecen 70 filas. Esto es un error, que se produce porque no había ninguna columna de coincidencia en los DataFrame combinados, todos los datos NaN los interpreta como datos faltantes. Para solucionar esto nos vamos al apartado siguiente.
e. Crea un DataFrame DF6 con el fichero 2columnas_cotización_nombre.csv. Este fichero es el mismo que el apartado anterior pero con una columna más, la del nombre de las empresas del IBEX35. Al concatenar este nuevo fichero con el DF3 en un DataFrame denominado DF7 obtendremos una concatenación correcta, no como sucedía en el apartado anterior. Esto se ve en las imágenes siguientes.