La automatización de hojas de cálculo con Python permite procesar datos de manera eficiente utilizando bibliotecas como openpyxl y pandas. Esta técnica es aplicable en diversos contextos:
1. Lectura y escritura de datos
- Procesamiento masivo de múltiples libros de trabajo (formatos xls/xlsx/csv)
- Generación dinámica de reportes con formato personalizado (fuentes, bordes, colores)
- Ejemplo: Consolidación mensual de datos de ventas de 20 sucursales
2. Limpieza de datos
- Gestión de valores faltantes (relleno automático o eliminación de filas vacías)
- Estandarización de formatos (fechas, monedas)
- Detección de valores atípicos (marcado automático)
- Ejemplo: Normalización de tablas de clientes (eliminación de duplicados, completado de contactos)
3. Flujos automatizados
- Tareas programadas (generación automática de informes diarios)
- Envío automático de correos con archivos adjuntos
- Integración con bases de datos (exportación SQL a Excel)
- Ejemplo: Sistema de recursos humanos para generar nóminas y distribuirlas por correo
Consideraciones importantes:
- Respaldar los archivos originales antes de procesarlos
- Para grandes volúmenes de datos (más de 100,000 filas), procesar en bloques
- Verificar compatibilidad entre diferentes versiones de Excel
Operaciones fundamentales
Método read_excel()
Para importar datos desde Excel, se utiliza la función read_excel() de pandas:
import pandas as pd
ruta_archivo = "D:/documentos/datos.xlsx"
df = pd.read_excel(ruta_archivo)
print(df.head())
Esta función acepta varios parámetros opcionales:
| Parámetro | Descripción |
|---|---|
| io | Ruta del archivo. Obligatorio. |
| sheet_name | Nombre o índice de la hoja (comienza en 0) |
| skiprows | Número de filas iniciales a omitir |
| skipfooter | Número de filas finales a omitir |
| usecols | Columnas a leer (ej: "A:D" o "A,C,F") |
| names | Lista para renombrar encabezados |
Ejemplo práctico
Dado un archivo con encabezados combinados que se pierden al seleccionar un rango específico, podemos especificar nuevos nombres:
import pandas as pd
ruta = 'D:/evaluaciones/resultados.xlsx'
nombres_columnas = [
'estudiante', 'identificador', 'lenguaje', 'matematicas',
'ingles', 'etica', 'educacion_fisica', 'artes', 'trabajo', 'puntuacion_total'
]
df = pd.read_excel(
ruta,
skiprows=7,
skipfooter=5,
usecols="B:K",
names=nombres_columnas
)
print(df.head())
Función concat() para fusionar archivos
Cuando se tienen múltiples archivos con estructura idéntica (por ejemplo, datos de diferentes departamentos), se pueden combinar mediante concat().
Primero, importamos las bibliotecas necesarias:
import pandas as pd
import glob
import os
Definimos la carpeta que contiene los archivos:
ruta_carpeta = 'D:/informes/departamentos'
Utilizando os.path.join() para crear rutas compatibles con cualquier sistema operativo:
patron_busqueda = os.path.join(ruta_carpeta, '*.xlsx')
La función glob.glob() retorna una lista con las rutas de archivos que coinicden:
archivos_encontrados = glob.glob(patron_busqueda)
Para incluir ambos formatos (xlsx y xls), se combinan las listas:
archivos_excel = glob.glob(os.path.join(ruta_carpeta, '*.xlsx')) + \
glob.glob(os.path.join(ruta_carpeta, '*.xls'))
Ahora iteramos sobre cada archivo y almacenamos los DataFrames:
todos_los_datos = []
for ruta_archivo in archivos_excel:
try:
dataframe = pd.read_excel(ruta_archivo)
todos_los_datos.append(dataframe)
except Exception as error:
print(f"Error al procesar {ruta_archivo}: {error}")
Finalmente, combinamos todos los DataFrames en uno solo:
df_final = pd.concat(todos_los_datos, ignore_index=True)
Parámetros principales de concat():
| Parámetro | Descripción |
|---|---|
| objs | Lista de DataFrames. Obligatorio. |
| ignore_index | True: reiniciar índices. False: mantener originales. |
| axis | 0 o 'index': apilar verticalmente. 1 o 'columns': concatenar horizontalmente. |
Método to_excel() para exportación
Una vez procesada la información, se puede guardar en un nuevo archivo Excel. Es importante verificar que el objeto sea un DataFrame:
print(type(todos_los_datos)) # <class 'list'>
print(type(df_final)) # <class 'pandas.core.frame.DataFrame'>
Parámetros常用 de to_excel():
| Parámetro | Descripción |
|---|---|
| excel_writer | Ruta y nombre del archivo de salida. Obligatorio. |
| sheet_name | Nombre de la hoja (por defecto: Sheet1) |
| na_rep | Representación de valores NaN (por defecto: cadena vacía) |
| float_format | Formato de números decimales (ej: '%.2f' para dos decimales) |
| columns | Columnas específicas a exportar |
| header | True/False o lista de nombres personalizados |
| index | Incluir índice de fila (por defecto: True) |
Ejemplo básico de exportación:
df_final.to_excel('D:/resultados/procesado.xlsx', index=False)