- O Pandas é ideal para processar e transformar dados em grande escala; o OpenPyXL se destaca em formatação, estilo e controle de pastas de trabalho.
- A combinação de ambas as bibliotecas permite automatizar relatórios: cálculos com pandas e layout com openpyxl.
- Otimize o desempenho lendo somente as colunas necessárias e usando os modos somente leitura/somente gravação quando apropriado.
Se você está envolvido em análise de dados ou precisa automatizar tarefas repetitivas em planilhas, combine Python com Excel é um jogada vencedora para acelerar seu fluxo de trabalhoO Excel ainda é a ferramenta mais popular em muitas empresas, e aprenda como evitar que o Excel converta números em datas, enquanto o Python oferece poder, flexibilidade e um ecossistema de bibliotecas projetadas para dados. Neste guia, você verá, em detalhes, como ler e processar planilhas do Excel com pandas y openpyxl, quando usar cada um e como tirar o máximo proveito deles em situações da vida real.
Além de abrir um arquivo e visualizar algumas células, aqui você aprenderá como carregar planilhas e intervalos específicos, filtrar, transformar e salvar resultados, forma lágrima células com estilos avançados, criar novas pastas de trabalho e planilhas, gerar relatórios automatizados e até mesmo criar gráficos ou pequenos painéis. Iremos do básico a exemplos práticos, com código pronto para adaptação e com recomendações de desempenho e melhores práticas para evitar gargalos e erros típicos.
Preparando o ambiente e as bibliotecas necessárias
Antes de começar, certifique-se de ter uma versão recente do Python instalada; é recomendado Python 3.7 ou superior para garantir a compatibilidade com as bibliotecas que usaremos. Para verificar sua versão, você pode executar o seguinte comando no terminal.
python --version
Para manipular o Excel em Python, as principais bibliotecas que você usará são pandas y openpyxl; cada um cobre necessidades diferentes. Com pip Você pode instalá-los em um momento e começar a experimentar.
pip install pandas openpyxl
Se você preferir gerenciar dependências com um gerenciador como o Poetry, você também pode instalar ambos os pacotes com comandos simples, por exemplo poesia adicionar pandas y poesia adicionar openpyxl, o que ajuda você manter um ambiente reproduzível por projeto sem dores de cabeça.

Lendo livros, planilhas e células com openpyxl
A biblioteca openpyxl Funciona diretamente em arquivos .xlsx, permitindo abrir pastas de trabalho, manipular planilhas e ler/escrever células com precisão. É ideal quando você precisa controle fino de formato, aplicar estilos, fórmulas e trabalhar com a estrutura do Excel como tal.
from openpyxl import load_workbook
# Cargar un archivo Excel
workbook = load_workbook("example.xlsx")
# Ver nombres de hojas disponibles
print(workbook.sheetnames)
Depois que a pasta de trabalho estiver aberta, você pode selecionar uma planilha pelo nome e visualizar valores específicos. Essa abordagem é útil quando você deseja inspecionar células pontuais ou percorrer intervalos sem converter tudo em uma estrutura tabular.
# Seleccionar una hoja concreta
sheet = workbook
# Leer el valor de una celda
valor = sheet.value
print(f"Valor de A1: {valor}")
Para iterar por linhas ou intervalos, iter_linhas é seu aliado. Você pode delimitar linhas e colunas e processar cada célula. Se você só lê, habilitar o modo somente leitura reduz a memória e melhora a velocidade em arquivos grandes.
# Recorrer las primeras 10 filas
for fila in sheet.iter_rows(min_row=1, max_row=10):
valores =
print(" ".join(valores))

Leia e escreva dados de forma eficiente com pandas
Se seu objetivo é análise e manipulação de dadosO Pandas é a sua melhor aposta. Ele transforma planilhas do Excel em DataFrames (tabelas muito poderosas) para filtrar, agregar, transformar e exportar resultados mais rapidamente do que com loops manuais.
import pandas as pd
# Leer un Excel a DataFrame
df = pd.read_excel("datos.xlsx")
# Ver las primeras filas
print(df.head())
A função ler_excel permite carregar planilhas específicas, colunas específicas ou pular linhas iniciais (muito útil para arquivos com cabeçalhos ou notas complexas). Isso lhe dá controle e desempenho porque você evita trazer dados que não precisa.
# Hoja específica
df = pd.read_excel("datos.xlsx", sheet_name="Hoja2")
# Importar solo ciertas columnas (por etiqueta de Excel o nombre de columna)
df = pd.read_excel("datos.xlsx", usecols=) # Por letras
# Omitir filas del principio
df = pd.read_excel("datos.xlsx", skiprows=4)
Quando terminar de transformar seu DataFrame, você poderá transferi-lo para o Excel com um único método. índice=Falso Evite escrever o índice como uma coluna adicional, algo muito comum ao preparar relatórios empresariais.
# Guardar el DataFrame en Excel
df.to_excel("datos_procesados.xlsx", index=False)

Quando usar pandas e quando usar openpyxl
Embora se complementem, não abordam o mesmo problema: Pandas brilha no processamento em massa (filtragem, agregações, junções, limpeza), enquanto openpyxl rege o formato (estilos, bordas, larguras, fórmulas, gráficos, criação/exclusão de planilhas, etc.). Escolher com sabedoria economiza seu tempo.
Se você precisar modificar milhares de células com uma regra simples (por exemplo, adicionar 10% a uma coluna), com o pandas você fará isso em uma linha; no openpyxl você precisará percorrer células com laços e gerenciar referências. No entanto, se você quiser aplicar formatação corporativa, estilos ou adicionar gráficos à planilha final do Excel, o openpyxl é a solução.
Uma estratégia muito útil é combinar ambos: processar com pandas e, uma vez gerada a tabela final, usar openpyxl para polir o acabamento profissional (negrito, cabeçalhos centralizados, cores, formatos numéricos, etc.). Dessa forma, você tem desempenho e um resultado pronto para apresentar.
Operações comuns com pandas: seleção, filtragem e modificações
Com o Pandas, a seleção de colunas e a filtragem condicional são muito fáceis. Isso permite transformar grandes conjuntos de dados com operações vetorizadas sem escrever loops, obtendo um código mais legível e rápido.
import pandas as pd
archivo_excel = "ejemplo_excel.xlsx"
df = pd.read_excel(archivo_excel)
# Selección de columnas
df_col = df]
# Filtrado por condición
filtrado = df > 10]
# Nuevas columnas y transformaciones
df = df * 2
df = df.apply(lambda x: x + 5)
# Guardar resultado
df.to_excel("resultado_excel.xlsx", index=False)
Para inspecionar apenas uma parte, você pode usar .cabeça() ou indexação .iloc quando você precisa de linhas/colunas por posição. Além disso, ao exportar, o pandas suporta vários formatos (CSV, Parquet, etc.), o que abre opções além do Excel. Também é comum complementar o Pandas com guias sobre operações aritméticas no Excel ao migrar lógica entre ambos os ambientes.
Leitura e edição com openpyxl: de células a intervalos
Se o foco for o próprio documento do Excel, o openpyxl permite criar pastas de trabalho, adicionar planilhas, renomeá-las e excluir as desnecessárias. Esse controle detalhado é essencial quando você precisa adaptar-se ao layout de um modelo ou manter fórmulas existentes.
from openpyxl import Workbook, load_workbook
# Crear un libro nuevo
ewb = Workbook()
ws = ewb.active
ws.title = "Hoja Principal"
ewb.save("nuevo.xlsx")
# Cargar y manipular un libro existente
wb = load_workbook("datos_openpyxl.xlsx")
wb.create_sheet("Nueva Hoja")
del wb
wb.save("datos_openpyxl.xlsx")
O acesso a células ou intervalos individuais é simples. Você também pode ler, alterar valores e escrever De volta. Para mudanças significativas, usar intervalos e ter uma estrutura clara no Excel facilitará seu trabalho.
ws = wb
celda = ws
print(celda.value)
# Modificar valores
ws = "Nuevo Nombre"
# Recorrer un rango
for fila in ws:
for c in fila:
print(c.value)
Aplique estilos, formatos e números com OpenPyxl
Uma das vantagens do openpyxl é que você pode personalizar seu relatório com fontes, bordas, preenchimentos e alinhamentos, bem como formatos numéricos (como duas casas decimais). Isso é essencial para relatórios que pessoas não técnicas verão.
from openpyxl.styles import Font, Border, Side, PatternFill, Alignment
ws = wb
# Estilos
fuente = Font(name="Arial", size=12, bold=True, color="FF000000")
borde = Border(left=Side(style="thin"), right=Side(style="thin"),
top=Side(style="thin"), bottom=Side(style="thin"))
relleno = PatternFill(start_color="FFFF0000", end_color="FFFF0000", fill_type="solid")
# Aplicar a una celda
c = ws
c.font = fuente
c.border = borde
c.fill = relleno
c.alignment = Alignment(horizontal="center", vertical="center")
c.number_format = "0.00" # Dos decimales
wb.save("datos_openpyxl.xlsx")
Você também pode entrar fórmulas do excel diretamente nas células, que serão recalculadas quando o arquivo for aberto no Excel. Tenha em mente que Erros mais comuns em fórmulas do Excel, que geralmente aparecem ao misturar dados gerados por código e lógica de planilha.
ws.value = "=SUM(A1:B1)"
wb.save("datos_openpyxl.xlsx")
Gráficos e visualizações simples no Excel com OpenPyxl
Para concluir um relatório, às vezes é necessário incluir um gráfico na própria pasta de trabalho. Com o OpenPyXL, você pode criar gráficos de barras, linhas ou outros a partir de intervalos de dados e colocá-los em um local específico.
from openpyxl.chart import BarChart, Reference
chart = BarChart()
datos = Reference(ws, min_col=1, min_row=1, max_col=2, max_row=5)
chart.add_data(datos, titles_from_data=False)
ws.add_chart(chart, "E1")
wb.save("datos_openpyxl.xlsx")
Automação de relatórios: combinando Pandas e OpenPyxl
Uma receita muito útil é processar dados com pandas (totais, médias, agrupamentos) e despejar os resultados em uma nova pasta de trabalho, que você então decora com openpyxl para entregar um relatório bem formatadoEsse padrão é bem escalável para relatórios periódicos.
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
# Leer ventas
ventas = pd.read_excel("ventas.xlsx")
# Agregaciones
por_producto = ventas.groupby("Producto").sum()
promedio = ventas.mean()
# Crear libro de reporte
wb = Workbook()
ws = wb.active
ws.title = "Reporte de Ventas"
# Cabeceras
ws = "Producto"
ws = "Total Ventas"
ws = "Promedio Ventas Mensual"
enc = Font(bold=True)
for celda in ("A1", "B1", "C1"):
ws.font = enc
ws.alignment = Alignment(horizontal="center")
# Datos
fila = 2
for producto, total in por_producto.items():
ws = producto
ws = total
ws = promedio
fila += 1
wb.save("reporte_ventas.xlsx")
Se você também quiser fornecer coerência visual, adicione bordas finas e formatos numéricos para as colunas de valores. Dessa forma, seu relatório estará pronto para ser compartilhado sem ajustes manuais no Excel; e se você precisar automatizar o preenchimento, poderá contar com técnicas para preencher automaticamente os dados com base em padrões.
Processos típicos: filtragem, transformação e salvamento com Pandas
Um caso comum é filtrar por uma condição e salvar o resultado em um novo arquivo. Isso é feito em poucas linhas com o pandas e resulta em ideal para limpeza de tubulações ou preparação de dados para equipes de negócios.
import pandas as pd
df = pd.read_excel("example.xlsx")
# Filtrar ventas > 1000
filtrado = df > 1000]
# Guardar sin índice
filtrado.to_excel("filtered.xlsx", index=False)
print("Archivo guardado")
Se você precisar manter uma coluna original e criar uma modificada (por exemplo, adicionar 10% à "Área Total"), a operação vetorizada evita loops e deixa você com um DataFrame limpo e fácil de inspecionar.
df = pd.read_excel("cultivos.xlsx")
df = df
df = df * 1.1
# Mostrar primeras 10 filas a partir de la tercera columna
print(df.iloc)
Se você também preferir ocultar temporariamente os resultados no arquivo final em vez de excluí-los, considere as regras para ocultar linhas com base no valor da célula e facilitar a revisão da equipe.
Excluindo linhas e limpando dados
Outra tarefa comum é excluir registros por posição ou condição. Com o Pandas, excluir as 10 primeiras linhas é simples usando o índice; para filtros mais complexos, usar expressões booleanas sem for-loops.
df = pd.read_excel("cultivos.xlsx")
# Quitar las 10 primeras filas por índice
df.drop(df.index, inplace=True)
print(df.head(10))
Se sua limpeza depende de regras como "excluir linhas com Área Total uniforme", você pode criar uma condição e aplicá-la, mantendo o código expressivo e sustentável contra loops e contadores manuais. E se a folha estiver protegida, lembre-se de como desproteger uma planilha do Excel com uma senha antes de modificá-lo.
Edição e exclusão com openpyxl: células e linhas
Ao trabalhar com OpenPyxl, modificar uma coluna inteira envolve percorrer as células. A vantagem é que você pode inserir novas colunas, respeitar o layout original e salvar em outro arquivo sem quebrar o formato.
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
wb = load_workbook("cultivos.xlsx")
ws = wb
# Insertar columna G y titularla
ws.insert_cols(7)
ws = "Area Total Modificada"
# Sumar 10% a la columna F y guardar antiguo valor en G
for fila in ws.iter_rows(min_row=2):
valor_antiguo = None
for celda in fila:
col = get_column_letter(celda.column)
if col == "F":
valor_antiguo = celda.value
celda.value = float(celda.value) * 1.1
if col == "G":
celda.value = valor_antiguo
wb.save("cultivos_modify.xlsx")
Para excluir linhas por posição, o openpyxl também resolve com uma chamada, embora para condições avançadas Você terá que iterar e decidir o que excluir com base no conteúdo de cada linha.
wb = load_workbook("cultivos.xlsx")
ws = wb
# Eliminar las 10 primeras filas (ajusta idx si hay cabeceras)
ws.delete_rows(idx=1, amount=10)
wb.save("cultivos_modify.xlsx")
Consolide vários arquivos do Excel em um
Um clássico: você tem dezenas de arquivos .xlsx com o mesmo esquema e deseja juntá-los em uma única mesa para analisá-los. Com pandas e glob, você pode fazer isso em poucas linhas, sem abrir cada arquivo manualmente.
import pandas as pd
import glob
excel_files = glob.glob("*.xlsx")
# Concatenar todo en un DataFrame
todos = pd.concat(, ignore_index=True)
todos.to_excel("consolidated_data.xlsx", index=False)
Essa abordagem é perfeita para integrações mensais, relatórios de múltiplas delegações ou qualquer processo em que você receba vários livros com uma estrutura homogênea.
Gerar relatórios por departamento automaticamente
A partir de um arquivo com vendas globais, você pode segmentar por departamento e gerar um relatório personalizado para cada um automaticamente. Cada arquivo está pronto para ser compartilhado com sua equipe.
import pandas as pd
sales = pd.read_excel("sales_data.xlsx")
departamentos = sales.unique()
for dpto in departamentos:
df_dpto = sales == dpto]
df_dpto.to_excel(f"{dpto}_report.xlsx", index=False)
Se você também precisar formatar cada relatório, você pode carregar o arquivo resultante com openpyxl e cabeçalhos de estilo, ajuste a largura das colunas e adicione uma cor corporativa. Você também pode automatizar a organização de arquivos e criar pastas e subpastas em cascata para cada departamento.
Pequeno painel interativo com Tkinter e pandas
Para prototipagem rápida, você pode criar uma janela simples que exibe colunas e calcula a média da coluna selecionada. Não é um BI completo, mas funciona para validações expressas sem sair do Python.
import tkinter as tk
import pandas as pd
from tkinter import messagebox
file = "data.xlsx"
data = pd.read_excel(file)
def calcular_media():
col = listbox.get(listbox.curselection())
media = data.mean()
messagebox.showinfo("Resultado", f"Promedio en {col}: {media:.2f}")
root = tk.Tk()
root.title("Dashboard interactivo")
listbox = tk.Listbox(root)
listbox.pack()
for c in data.columns:
listbox.insert(tk.END, c)
btn = tk.Button(root, text="Calcular promedio", command=calcular_media)
btn.pack()
root.mainloop()
Para projetos de relatórios mais complexos, você pode querer mover isso para um aplicativo da web com Streamlit ou Dash, mas para um utilitário local rápido, o Tkinter pode tirar você de uma enrascada com muito pouco código.
Análise Exploratória: Estatísticas e Gráficos com Pandas + Matplotlib
Quando o seu arquivo Excel contém informações de clientes ou vendas, é uma boa ideia dar uma olhada rápida nas distribuições e relacionamentos. Com o Pandas, você pode obter estatísticas descritivas e, com o Matplotlib, gerar histogramas e gráficos de dispersão muito útil.
import pandas as pd
import matplotlib.pyplot as plt
clientes = pd.read_excel("clientes.xlsx")
# Estadísticas generales
print(clientes.describe())
# Histograma de edades
clientes.hist(bins=20)
plt.xlabel("Edad")
plt.ylabel("Frecuencia")
plt.title("Distribución de edades")
plt.show()
# Dispersión ingresos vs satisfacción
clientes.plot.scatter(x="Ingresos", y="Satisfaccion")
plt.xlabel("Ingresos")
plt.ylabel("Satisfacción")
plt.title("Ingresos vs. Satisfacción")
plt.show()
Com isso, você pode detectar outliers, vieses ou relações interessantes para se aprofundar mais tarde. Se quiser relatá-lo no Excel, exporte tabelas de resumo com pandas e criar gráficos no livro com openpyxl para uma entrega completa. Para análises estatísticas específicas, você também pode consultar o função quartil no Excel como referência na migração de indicadores.
Salvando resultados com pandas e openpyxl
Com o Pandas, escrever para Excel é instantâneo; além disso, você tem a vantagem de exportar para outros formatos, como CSV ou Parquet. Se o arquivo for para fins comerciais, adicione folhas com detalhes diferentes ou dados filtrados por segmentos no mesmo livro.
df = pd.read_excel("cultivos.xlsx")
df = "SI"
df.to_excel("cultivos_modify_pandas.xlsx", index=False)
Se você estiver trabalhando com OpenPyXL, lembre-se de que pode criar novas colunas e preenchê-las por intervalo. É uma maneira simples de registros de marcas revisados em relatórios com estrutura fixa.
from openpyxl import load_workbook
wb = load_workbook("cultivos.xlsx")
ws = wb
ws = "Revisado"
for celda in ws:
celda.value = "SI"
wb.save("cultivos_modify_openpyxl.xlsx")
Desempenho e boas práticas
Para arquivos grandes, é uma boa ideia limitar a quantidade de dados que você busca na memória. No Pandas, leia apenas as colunas necessárias com usecols e evite processar planilhas irrelevantes. No openpyxl, use somente leitura=Verdadeiro para ler e write_only=Verdadeiro para escrever.
Cuidado com os tipos de dados: às vezes, o Excel salva números como texto, o que pode quebrar filtros e agregações. Ao carregar com o Pandas, você pode especificar tipos de dados ou normalizar colunas depois de ler para evitar surpresas com datas, valores ou identificações.
Com fórmulas do Excel, lembre-se de que nem todas as funções são suportadas igualmente pelas bibliotecas; provavelmente são recalculados quando abertos no ExcelSe precisar de valores fixos, avalie primeiro com o pandas e escreva de volta os números pré-calculados.
Em relação à compatibilidade, priorize os arquivos . Xlsx (formato moderno) e teste seus scripts com diferentes versões do Excel quando seus usuários tiverem ambientes heterogêneos. Isso reduz problemas devido a funções ou recursos não suportados em versões mais antigas.
Como nota final, pense em pipelines reproduzíveis: defina dependências (Poetry, requirements.txt), documente seus parâmetros (sheet_name, usecols, skiprows) e adicione toras mínimo para depuração. Isso economizará tempo ao dimensionar seu projeto ou alterar sua fonte de dados.
Se você chegou até aqui, já domina a leitura, o processamento e a escrita em Excel com pandas e openpyxl, você sabe quando cada ferramenta é apropriada e como combiná-los para gerar relatórios profissionais. A partir de agora, você verá suas planilhas como fontes e destinos em um fluxo de trabalho robusto, automatizado e muito mais rápido.
Escritor apaixonado pelo mundo dos bytes e da tecnologia em geral. Adoro compartilhar meu conhecimento por meio da escrita, e é isso que farei neste blog, mostrar a vocês tudo o que há de mais interessante sobre gadgets, software, hardware, tendências tecnológicas e muito mais. Meu objetivo é ajudá-lo a navegar no mundo digital de uma forma simples e divertida.
