Fusionar dos archivos Excel con Python pandas
Uno de los trabajos habituales en el tratamiento de datos para análisis SEO y aplicación de algoritmos de Machine Learning es unir o fusionar dos archivos Excel con Python. Para conseguir unir toda la información vamos a usar la biblioteca Pandas (pandas.pydata.org) y la función "read_excel()".
- Índice de contenidos:
Fusionar archivos Excel con distinto número de filas
El código del script Python para fusionar varios archivos Excel es corto y sencillo, pero tenemos diferentes opciones según los datos que deseamos unir, concatenar o fusionar. Este primer ejemplo fusiona 2 Excel con un número de filas diferente:
import pandas as pd
# Leemos los datos de los archivos Excel para convertirlos en DataFrame.
df1 = pd.read_excel(path_file1.xlsx)
df2 = pd.read_excel(path_file2.xlsx)
# Fusionamos los dataframes
inner_merge = pd.merge(left='df1', right='df2', how='outer', on=None)
# Añadir 0 a los valores vacíos (empty)
inner_merge.fillna(0, inplace=True)
# Exportamos dataframe a un nuevo archivo Excel - genera el archivo en la carpeta raíz del proyecto Python.
path_inner_merge = 'inner_merge.xlsx'
df.to_excel(path_inner_merge, index=False)
# Mostramos el resultado
print(inner_merge)
--------------------
"""
# NOTA: Si las columnas tienen datos tipo String u object, hay que cambiar fillna por uno de los siguientes.
# Añadir 0 a los valores vacíos tipo string
#inner_merge[inner_merge.select_dtypes('string').columns] = inner_merge.select_dtypes('string').fillna('empty')
# Añadir 0 a los valores vacíos tipo numérico
#inner_merge[inner_merge.select_dtypes('number').columns] = inner_merge.select_dtypes('number').fillna(0)
"""
--------------------
Con este tipo de unión de archivos Excel conseguimos no perder ningún dato, es decir, realizar una fusión completa de todas las filas contenidas en ambos ficheros. Es la que más utilizo, aunque también hay otras formas de utilizar pd.merge. Vamos a ver todas las opciones posibles que nos proporciona la biblioteca pandas y la función merge().
Opciones de fusión con la función pandas.merge()
- Primero realizamos la importación de la biblioteca pandas de Python.
- Después leemos los archivos Excel:
- Si queremos fusionar archivos .csv en lugar de .xlsx, solo hay que cambiar pd.read_excel(path_file.xlsx) por pd.read_csv('path_file.csv') y con estos cambios funciona correctamente.
- Después fusionamos los archivos:
- left: indica el dataframe que se considerará primero, rellenando con valores faltantes donde sea necesario.
- right: el segundo dataframe para realizar la fusión, también rellenando con valores vacíos donde no exiten.
- how: especifica el tipo de fusión a realizar. Los valores posibles son los siguientes:
- inner: fusión que incluye las filas contenidas en ambos dataframes.
- outer: fusión que añade todas las filas de ambos dataframes. Si alguna columna no tiene datos en uno de ellos, añade el valor vacío.
- left_index y right_index: especifican si se debe usar el índice en lugar de columnas específicas para la fusión.
- Rellenamos los valores vacíos con 0 (cero): los valores deben ser tipo numérico, (int, float) ya que, si hay columnas con valores string u object, inner_merge.fillna(0, inplace=True) fallará mostrando error. En ese caso, deberíamos añadir:
data_all[data_all.select_dtypes('string').columns] = data_all.select_dtypes('string').fillna('empty') data_all[data_all.select_dtypes('number').columns] = data_all.select_dtypes('number').fillna(0)
Unir archivos Excel y .csv con el mismo número de filas
Esta unión es útil cuando disponemos de dos archivos con un número de filas idéntico, al mismo tiempo que tenemos una columna común. Lo uso bastante para unir los enlaces que tienen las urls de un dominio ya que, la columna 'URL' no cambia y el el centro de la unión.
import pandas as pd
# Leemos los datos de los archivos Excel para convertirlos en DataFrame.
df1 = pd.read_excel(path_file1.xlsx)
df2 = pd.read_excel(path_file2.xlsx)
# Fusionamos los dataframes
inner_merge = df1.merge(
df2, left_on='column_common_df1', right_on='column_common_df2'
)
# Exportación de los dataframe a un archivo Excel
df.to_excel(path_inner_merge, index=False)
# Exportación de los dataframe a un archivo .csv
df.to_csv(path_inner_merge, index=False)
# Mostramos el resultado
print(inner_merge)
- Primero realizamos la importación de la biblioteca pandas de Python.
- Leemos los archivos.
- Realizamos la fusión: hay que tener en cuenta que cada dataframe debe contener el mismo número de filas para no perder datos en el proceso de la unión.
- Exportación a un nuevo archivo: es generado en la carpeta raíz del proyecto Python. Puede indicarse la ruta deseada.
- Mostrar por consola el contenido de la unión.
Comentarios del artículo "Fusionar dos archivos Excel con Python pandas"
¿Te ha gustado la información? Coméntanos tus opiniones, dudas y sugerencias: