Combina Excel y Python: flujos, UDFs y visualizaciones

  • Uso de pandas y merge para fusionar datos de Excel y CSV sin perder información, controlando tipos de unión y valores faltantes.
  • Integración de Python en Excel mediante la función PY y xl(), permitiendo trabajar con rangos, tablas y DataFrames directamente en celdas.
  • Automatización avanzada con librerías como IronXL para fusionar y desfusionar celdas, manipular formatos y gestionar libros de Excel en detalle.
  • Aplicación práctica de scripts en Python para consolidar múltiples archivos, hojas y tablas por llave, reduciendo errores y tiempo de trabajo manual.

Combinar Excel y Python

Combinar Excel y Python se ha convertido en una de las formas más potentes de trabajar con datos cuando tenemos que tratar informes recurrentes, consolidar ficheros de distintas fuentes o automatizar tareas que en Excel, a mano, pueden llevar horas. Si te mueves a diario entre hojas de cálculo, CSV, reportes de negocio o listados para análisis, aprender a unir ambos mundos te abre la puerta a flujos de trabajo mucho más rápidos y, sobre todo, repetibles.

La idea clave es sencilla: Excel sigue siendo tu interfaz cómoda para ver y preparar datos, y Python es el motor que automatiza y combina todo por detrás. Gracias al uso del nuevo Python integrado en Excel, hoy en día puedes cubrir prácticamente cualquier necesidad.

Opciones para combinar datos de Excel con Python usando pandas

El enfoque más habitual para unir datos de Excel con Python es usar la librería pandas, que ofrece funciones muy potentes para leer, fusionar y transformar hojas de cálculo. El corazón de estas operaciones es pandas.merge(), que funciona de forma parecida a las combinaciones de tablas en bases de datos o a un BuscarV/BuscarX muy mejorado.

El flujo básico suele seguir cuatro pasos:

  1. Importar pandas.
  2. Leer los archivos.
  3. Fusionarlos.
  4. Limpiar los valores faltantes.

Con este proceso puedes hacer uniones completas entre dos ficheros, asegurándote de no perder información y controlando en todo momento qué filas entran y cuáles se quedan fuera.

Importación y lectura

Para empezar, se importa pandas en tu script de Python con una instrucción tan simple como import pandas as pd. A partir de ahí ya puedes leer tus libros de Excel con pd.read_excel() o, si trabajas con ficheros CSV, recurrir a pd.read_csv(), cambiando únicamente la función de lectura pero manteniendo el resto del flujo exactamente igual.

La lectura de archivos Excel y CSV con pandas te permite convertir cada hoja o fichero en un DataFrame, que es una tabla en memoria sobre la que luego puedes hacer filtros, agrupaciones y, por supuesto, uniones. Por ejemplo, podrías leer dos archivos así: df_left = pd.read_excel("ventas_enero.xlsx") y df_right = pd.read_excel("ventas_febrero.xlsx"), o la variante con read_csv si el origen son CSV.

Fusión

El momento clave llega cuando utilizas pd.merge() para fusionar dos DataFrames. Esta función recibe, como mínimo, los argumentos left y right, que indican qué tablas quieres combinar, y un parámetro how que define el tipo de unión. El comportamiento de how es fundamental para controlar si se conservan todas las filas, solo las coincidentes o únicamente las de un lado.

Entre los valores más utilizados para how están inner y outer. Con inner solo se mantendrán las filas que existan en ambos DataFrames según la clave de combinación que indiques; es decir, te quedas únicamente con la intersección de los datos. Con outer se mezclan todas las filas de ambos ficheros. Y cuando en alguna de las tablas no exista un valor para cierta columna se rellenará con un valor ausente (NaN).

Además de las columnas, pandas permite fusionar por índices usando left_index y right_index. Si activas estos argumentos (por ejemplo, left_index=True, right_index=True), la unión se hace utilizando los índices de fila en lugar de columnas específicas. Esta opción es muy útil cuando ya tienes el índice preparado como identificador único o cuando las columnas no están bien alineadas pero el índice sí.

Valores vacíos

Tras unir los DataFrames, suele ser habitual tratar los valores vacíos. Muchas veces quieres convertir los NaN numéricos en ceros y dejar algún texto claro para los campos de tipo cadena. Un patrón frecuente es algo como: usar select_dtypes('string') para localizar columnas de texto y rellenarlas con una palabra como «empty», y usar select_dtypes('number') para columnas numéricas y reemplazar sus NaN por 0. Así evitas problemas posteriores cuando exportas a Excel o haces cálculos.

Hay que tener en cuenta que rellenar valores faltantes exige respetar el tipo de dato de cada columna. Si intentas aplicar un fillna(0) directamente sobre columnas de texto, el proceso fallará, de modo que conviene separar primero columnas de tipo numérico y de tipo cadena. Esta separación evita errores y te permite controlar qué marcador utilizas para cada tipo de información.

Unir datos de Excel con Python

Unir archivos Excel y CSV con el mismo número de filas

En muchos escenarios prácticos te encuentras con dos archivos que comparten exactamente el mismo número de filas y una columna común que actúa como eje: por ejemplo, un listado de URLs de un dominio junto con métricas de SEO en un fichero y datos de visitas o conversiones en otro. En estas situaciones, la unión es muy directa y te permite ampliar cada fila con más información sin perder el alineamiento de los datos.

Cuando el conteo de filas coincide en ambos ficheros y la columna clave no cambia, la combinación de los datos resulta relativamente sencilla, pero aun así conviene seguir una estructura ordenada. Lo ideal es leer los dos libros con pandas, asegurarte de que la columna de unión (como «URL») está escrita igual y con el mismo tipo de dato, y después ejecutar un merge que preserve todas las filas.

En este tipo de unión interesa especialmente comprobar que ambas tablas tienen la misma longitud. Si uno de los archivos viene con filas adicionales, podrías terminar perdiendo información o generando filas que no deberían estar. Por eso, antes de hacer la fusión, tiene sentido revisar algo como len(df1) y len(df2) para validar que el volumen de registros sea efectivamente el mismo.

Una vez hecha la fusión entre Excel y/o CSV, el siguiente paso natural es exportar el resultado a un nuevo libro. Pandas te permite escribir directamente con to_excel(), lo que generará un archivo en la carpeta de tu proyecto Python salvo que especifiques otra ruta. De esta forma, todo el trabajo de combinación queda reflejado en un Excel normal que puedes abrir, filtrar, formatear y compartir.

Usar Python directamente dentro de Excel (Python en Excel)

Además de trabajar con scripts externos, cada vez cobra más fuerza la integración oficial de Python dentro de Excel. Esta funcionalidad te permite escribir código Python en celdas, de manera parecida a como escribirías una fórmula, y combinarlo con rangos y tablas ya presentes en el libro.

Para comenzar a usar Python en Excel puedes hacerlo desde la pestaña de fórmulas, escogiendo la opción para insertar Python en la celda activa, o utilizando directamente la función =PY(). En cuanto haces esto, Excel entiende que el contenido dentro de esa celda será interpretado como código Python, manteniendo una pequeña marca visual con un icono identificativo. Si necesitas más detalles prácticos, consulta nuestra guía completa de Python en Excel.

Una de las claves de esta integración es la función auxiliar xl(), que sirve de puente entre Excel y Python. Gracias a ella puedes referenciar rangos, tablas, consultas o nombres definidos de Excel dentro del código Python.

La hoja de cálculo sigue respetando un orden de cálculo, pero las celdas de Python se ejecutan fila a fila. De izquierda a derecha, y después bajando en la hoja.

La barra de fórmulas ofrece un modo de edición cómodo para el código Python, permitiendo saltos de línea, expansión para ver varias líneas de golpe y atajos de teclado para extender o contraer la zona de escritura.

excel web

Control de salidas, recálculo y errores en Python para Excel

Cuando utilizas Python dentro de Excel, puedes elegir cómo quieres que se devuelvan los resultados. Tienes la opción de convertir el resultado a valores de Excel clásicos, que se escriben directamente en la celda, o de mantenerlos como objetos de Python. Esto es especialmente útil cuando trabajas con estructuras como DataFrames.

Si devuelves el cálculo como objeto Python, la celda se muestra con un icono de tarjeta. Al hacer clic puedes abrir una vista previa donde se ven detalles de ese objeto. Algo muy práctico al manejar conjuntos de datos voluminosos. Este enfoque te permite manejar resultados ricos sin saturar la hoja con cientos o miles de filas visibles.

Determinados tipos de datos se llevan especialmente bien con esta integración, y el DataFrame de pandas es uno de los más destacados. Trabajar con DataFrames dentro de Excel facilita la transición desde el análisis en código hacia la presentación de los resultados en tablas o gráficos tradicionales de la hoja.

El recálculo se gestiona igual que en otras fórmulas de Excel, pero con particularidades. Cada vez que cambias una celda de la que depende una fórmula Python, se vuelve a ejecutar la secuencia de celdas Python implicadas. Para mejorar el rendimiento, sobre todo cuando trabajas con modelos pesados, puedes cambiar al modo de cálculo parcial o manual, de manera que solo se recalcule cuando lo pidas expresamente.

En estos modos manuales tienes varias formas de lanzar de nuevo el cálculo: con la tecla F9, desde el botón «Calcular ahora» en la cinta de fórmulas o, en algunos casos, desde el propio indicador de celda que muestra que el valor está desactualizado. Esta flexibilidad te ayuda a equilibrar precisión y rendimiento mientras desarrollas tus análisis.

Automatizar la carga y procesamiento de Excel con scripts de Python

Más allá del entorno integrado en Excel, sigue siendo muy habitual trabajar con scripts de Python externos para procesar ficheros de entrada. Un patrón típico consiste en tener un archivo de configuración (por ejemplo, config.json), un script como data_processing.py y uno o varios libros de Excel que actúan como fuentes de datos.

El flujo de trabajo es el siguiente:

  1. Preparar el archivo Excel de entrada, al que podrías llamar algo como input.xlsx. Este fichero se coloca en la misma carpeta que el script de Python para simplificar las rutas, especialmente si estás comenzando y no quieres complicarte con rutas absolutas o relativas más avanzadas.
  2. Crear el archivo de código. Por ejemplo data_processing.py, en tu editor o IDE favorito. Ahí copias el código base que tengas (clases, funciones, etc.) y lo adaptas a tu caso concreto, guardando los cambios cada vez que añades una nueva parte de lógica relacionada con la lectura o transformación de datos.
  3. Guardar el script y ejecutar el programa desde la terminal. Suponiendo que estás en el mismo directorio donde se encuentra data_processing.py, lanzarías algo como python data_processing.py config.json input.xlsx, ajustando el nombre del fichero de configuración según dónde lo tengas. La idea es que el script lea config.json para conocer qué operaciones aplicar, y luego trabaje sobre input.xlsx.

Iron XL

IronXL: combinar y manipular celdas de Excel con Python

Además de pandas y la integración nativa de Python en Excel, existen librerías específicas como IronXL pensadas para manejar archivos de Excel de forma muy granular. Con ellas puedes no solo leer y escribir datos, sino también tocar estilos, fusionar y desfusionar celdas o trabajar con fórmulas avanzadas desde tus aplicaciones en Python.

IronXL está diseñada para trabajar con distintos formatos de hoja de cálculo, desde los clásicos XLSX y XLS hasta libros con macros (XLSM), plantillas (XLTX) o incluso ficheros de texto estructurado como CSV y TSV. Todo esto funciona en múltiples plataformas: Windows, macOS, Linux, contenedores Docker e incluso entornos en la nube como Azure o AWS.

La API de IronXL facilita mucho el día a día cuando necesitas manipular el formato. Puedes seleccionar hojas, leer y escribir valores de celdas concretas, controlar fuentes, colores de fondo, bordes, alineación o formatos de número, fecha, porcentaje, moneda, etc. Además, las fórmulas de Excel se recalculan automáticamente cuando cambias celdas implicadas. Siempre manteniendo el comportamiento esperado para usuarios acostumbrados a Excel.

Para empezar a usar IronXL en un proyecto de Python, primero deberás instalar el paquete con pip, mediante un comando como pip install ironxl. Después, importarías el módulo con algo como from ironxl import * y, en entornos que lo requieran, establecerías una clave de licencia, que en el caso de las versiones de prueba puedes obtener gratuitamente desde la propia web del proveedor.

Una vez configurada la librería, el primer paso es cargar el libro de Excel que quieras manipular. Por ejemplo, workbook = WorkBook.Load("test_excel.xlsx") abriría un archivo llamado test_excel.xlsx para trabajar con él en memoria. A partir de ese momento puedes recorrer sus hojas, cambiar datos, fusionar regiones y finalmente guardar el resultado con un simple workbook.Save().

Fusionar y desfusionar celdas específicas con IronXL

Cuando tu objetivo no es solo combinar datos de varias fuentes, sino también mejorar la presentación en Excel, fusionar celdas de forma programática puede ahorrarte mucho tiempo. Imagina una columna con países donde aparecen varias filas seguidas con «Estados Unidos». Quizá quieras fusionar esas celdas para que el reporte sea más limpio para la persona que lo va a consultar.

Con IronXL puedes seleccionar la hoja sobre la que quieres trabajar accediendo a su índice o nombre. Por ejemplo, worksheet = workbook.WorkSheets te llevaría directamente a la primera hoja del libro. A partir de ahí, tus operaciones se aplican a esa hoja: lectura de celdas, escritura, estilos o fusiones.

Para fusionar celdas en un rango concreto, IronXL dispone del método Merge() en el objeto hoja. Esto significa que podrías ejecutar algo como worksheet.Merge("E5:E7") para combinar de la fila 5 a la 7 de la columna E, y worksheet.Merge("E9:E10") para otro grupo. Después solo tendrías que invocar workbook.Save() para conservar los cambios en el archivo de Excel.

Si necesitas saber qué regiones fusionadas existen en una hoja, IronXL permite recuperarlas programáticamente. Con un método como GetMergedRegions() puedes obtener una lista de todas las zonas de celdas combinadas y recorrerlas con un bucle, imprimiendo, por ejemplo, mergedRegion.RangeAddressAsString para ver el rango afectado en formato legible (A1:B3, E5:E7, etc.).

En algún momento puede que quieras revertir esas fusiones, por ejemplo para manipular de nuevo los datos fila a fila. En ese caso, la misma hoja expone un método Unmerge() al que le puedes pasar rangos como "E5:E7" o "E9:E10". Tras ejecutar estas llamadas y guardar el libro, las celdas vuelven a ser independientes, listas para recibir valores distintos o ser procesadas de otra forma.

En definitiva, combinar Excel y Python te permite pasar de un trabajo manual y repetitivo a flujos mucho más inteligentes, donde Excel sigue siendo tu visor y panel de control, pero es Python quien hace el trabajo duro de leer, unir, limpiar, fusionar celdas o recalcular. Una vez que te acostumbras a esta forma de trabajar, repetir procesos complejos se vuelve cuestión de unos pocos clics. O de un solo comando en la terminal.

Analiza tus datos como un científico: Herramientas de Excel para un análisis profesional y eficaz
Artículo relacionado:
Analiza tus datos como un científico: Herramientas de Excel para un análisis profesional y eficaz