Importar archivos Excel en Python permite automatizar informes, validar datos, combinar hojas y preparar información para análisis. Pandas ofrece una interfaz cómoda para leer tablas y convertirlas en DataFrames, mientras que openpyxl funciona como motor para archivos .xlsx y permite tareas más específicas sobre libros y celdas.
En esta guía aprenderás a instalar las dependencias, seleccionar hojas y columnas, controlar tipos, limpiar valores ausentes, trabajar con fechas y exportar resultados. Para comprender la estructura utilizada, consulta la guía de Pandas para principiantes.
Instalar Pandas y openpyxl
python -m pip install pandas openpyxlTrabaja dentro de un entorno aislado y registra las dependencias del proyecto. La documentación de pandas.read_excel() enumera los formatos, motores y parámetros disponibles. La documentación oficial de openpyxl cubre lectura y escritura de libros de Excel.
Leer una hoja completa
import pandas as pd
df = pd.read_excel("ventas.xlsx")
print(df.head())
print(df.info())Por defecto se lee la primera hoja. head() muestra una muestra y info() ayuda a detectar columnas, tipos y valores ausentes.
Elegir una hoja
df = pd.read_excel(
"ventas.xlsx",
sheet_name="Enero",
)Para cargar varias hojas en un diccionario de DataFrames:
hojas = pd.read_excel(
"ventas.xlsx",
sheet_name=["Enero", "Febrero"],
)
enero = hojas["Enero"]
febrero = hojas["Febrero"]Listar hojas antes de importar
import pandas as pd
with pd.ExcelFile("ventas.xlsx") as libro:
print(libro.sheet_names)
df = pd.read_excel(libro, sheet_name=libro.sheet_names[0])Este patrón evita asumir que una hoja existe y permite seleccionar dinámicamente.
Importar columnas específicas
df = pd.read_excel(
"ventas.xlsx",
usecols=["Fecha", "Producto", "Cantidad", "Precio"],
)Leer solamente las columnas necesarias reduce memoria y hace explícito el esquema esperado.
Controlar encabezados y filas
df = pd.read_excel(
"reporte.xlsx",
sheet_name="Datos",
skiprows=2,
header=0,
nrows=5000,
)Las hojas empresariales suelen incluir títulos o notas antes de la tabla. Comprueba visualmente dónde comienza el encabezado real.
Convertir tipos y fechas
df = pd.read_excel(
"ventas.xlsx",
parse_dates=["Fecha"],
dtype={
"Producto": "string",
"Cantidad": "Int64",
},
)No fuerces un tipo antes de inspeccionar los valores. Celdas mezcladas, textos inesperados o identificadores con ceros iniciales pueden requerir limpieza. La guía de datetime en Python ayuda a trabajar con fechas después de la importación.
Limpiar nombres de columnas
df.columns = (
df.columns
.astype(str)
.str.strip()
.str.lower()
.str.replace(" ", "_", regex=False)
)Un esquema predecible simplifica filtros, agrupaciones y exportaciones.
Tratar valores ausentes
print(df.isna().sum())
df["cantidad"] = df["cantidad"].fillna(0)
df = df.dropna(subset=["producto"])No sustituyas todos los valores ausentes con cero sin analizar su significado. Una celda vacía puede representar un dato desconocido, no aplicable o un error.
Filtrar y calcular columnas
df["total"] = df["cantidad"] * df["precio"]
ventas_validas = df[
(df["cantidad"] > 0)
& (df["precio"] >= 0)
]
resumen = (
ventas_validas
.groupby("producto", as_index=False)["total"]
.sum()
.sort_values("total", ascending=False)
)La guía de análisis de datos con Pandas y NumPy explica filtros, agrupaciones y resúmenes.
Combinar hojas mensuales
import pandas as pd
hojas = pd.read_excel(
"ventas-anuales.xlsx",
sheet_name=None,
)
partes = []
for nombre_hoja, datos in hojas.items():
copia = datos.copy()
copia["origen"] = nombre_hoja
partes.append(copia)
ventas = pd.concat(partes, ignore_index=True)sheet_name=None devuelve todas las hojas. Añadir el nombre de origen permite rastrear cada fila.
Exportar el resultado
with pd.ExcelWriter(
"resultado.xlsx",
engine="openpyxl",
) as escritor:
ventas_validas.to_excel(
escritor,
sheet_name="Datos limpios",
index=False,
)
resumen.to_excel(
escritor,
sheet_name="Resumen",
index=False,
)Para intercambios simples y archivos grandes, CSV puede ser más ligero. La guía de archivos CSV en Python compara un flujo basado en texto.
Manejar errores frecuentes
from pathlib import Path
import pandas as pd
ruta = Path("ventas.xlsx")
try:
df = pd.read_excel(ruta, sheet_name="Datos")
except FileNotFoundError:
print(f"No existe el archivo: {ruta}")
except ValueError as error:
print(f"Hoja o configuración no válida: {error}")
except ImportError:
print("Falta el motor necesario para leer Excel")La guía de try y except en Python muestra cómo manejar errores sin ocultar fallos inesperados. Para rutas, consulta pathlib en Python.
Buenas prácticas
- Conserva una copia del archivo original.
- Valida hojas y columnas antes de transformar datos.
- Lee solo las columnas necesarias.
- Documenta tipos, formatos de fecha y valores ausentes.
- No confíes en estilos visuales como fuente de significado.
- Exporta a un archivo nuevo antes de reemplazar resultados.
- Prueba con archivos pequeños y casos problemáticos.
Conclusión
Importar Excel en Python con Pandas funciona mejor cuando el proceso define un esquema claro: archivo, hoja, columnas, tipos y reglas de limpieza. Inspecciona los datos antes de convertirlos, conserva el origen y exporta resultados verificables. Pandas resuelve el trabajo tabular, mientras openpyxl complementa las tareas específicas del formato Excel.


