Hola a todos:
Espero que estéis bien!. El post de hoy llevaba mucho tiempo con ganas de hacerlo, se trata de realizar consultas join (inner, left, right, outer) en python utilizando la biblioteca pandas con datos importados de Excel y exportados al finalizar otra vez a Excel.
Se trata de un ejercicio de ejemplo en el que voy a mostrar las 4 consultas utilizando el siguiente ejemplo:
Os muestro las tablas de Excel que se encuentran las dos en el mismo archivo y que he denominado: «TABLAS»:
En la hoja 1 tenemos una serie de campos que se corresponden con una serie de empleados de unos grandes almacenes:
En la hoja 2 tenemos una tabla con el Id y el literal (nombre) de la sección:
De lo que se trata es de realizar las cuatro consultas mencionadas al principio. El código que vamos a utilizar es el siguiente:
import pandas as pd
import xlsxwriter
#Importamos las dos tablas
df1 = pd.read_excel(r"C:\Users\USUARIO\OneDrive\Documents-Segu\TABLAS\TABLAS.xlsx",sheet_name='Hoja1')
df2 = pd.read_excel(r"C:\Users\USUARIO\OneDrive\Documents-Segu\TABLAS\TABLAS.xlsx",sheet_name='Hoja2')
#combinamos tablas utilizando inner, left, right ...
df3= pd.merge(df1, df2.set_index('ID'), left_on=['ID_SECCION'], right_index=True, how='left')
#Reemplazamos n/a por celdas vacias
df3= df3.fillna('')
#Seleccionamos archivo para exportar y asignamos nombre a la hoja
writer=pd.ExcelWriter(r'C:\Users\USUARIO\OneDrive\Documents-Segu\TABLAS\RESULTADO.xlsx')
#Omitimos la columna del índice en los datos escritos en excel
df3.to_excel( writer,'Hoja1',index=False)
print(df3)
writer.save()
Este es el código que vamos a utilizar. Es importante mencionar que la línea de código fundamental es:
df3= pd.merge(df1, df2.set_index('ID'), left_on=['ID_SECCION'], right_index=True, how='left')
Aquí definiremos la consulta a realizar. La sintaxis está preparada para trabajar con columnas clave con nombres distintos (o iguales) y que únicamente traiga el nombre de la sección (sin el ID, que ya lo tenemos en la primera tabla).
Ejecutando el código, el resultado exportado a un archivo que denominaremos «RESULTADO» y que nos muestra todos los elementos de la primera tabla y los nombre de cada una de las secciones.
Si realizamos un inner mostrará todos aquellos elementos coincidentes en el campo clave:
En la consulta right mostrará todos los elementos de la tabla2 y aquellos que coincidan de la tabla1:
Y finalmente una consulta Full que realizaremos con la palabra «outer», que mostrará todas las posibilidades vistas anteriormente:
En esta ocasión como lo que me interesa es exportar directamente la tabla, sin escribir cada uno de los registros realizó una exportación directa:
df3.to_excel( writer,'Hoja1',index=False)
Y además elimino la columna que se muestra por defecto con el índice de los elementos y que para esto no nos aporta gran cosa.
Recomiendo la lectura para ampliar el tema en el siguiente enlace: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
Y esto es todo, espero os sea de utilidad, os dejo la hoja de ejemplo con las dos tablas:
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Hola , y como siempre gracias por tan estupendo post, que nos ayuda a muchos con nuestros análisis de datos.
No tengo experiencia con Python y quisiera saber que se necesita para poder usar la librería pandas. Es necesario instalar , supongo que el propio Python y luego algún editor Visual Studio o Anaconda .
Sabe si existe algún paquete combinado para hacer esto o la manera más sencilla para noveles?
Gracias de antemano
Saludos
En mi caso lo fui haciendo con tutoriales:
Este creo que te puede servir para montar los más importante, luego ya iras instalando bibliotecas, entre ellas Pandas.
https://www.tutorialesprogramacionya.com/pythonya/detalleconcepto.php?punto=53&codigo=53&inicio=45
Muchas gracias, es paso a paso y se ve bien explicado. Muy amable. Un saludo