Como ler e processar planilhas do Excel com pandas e openpyxl: do zero ao profissional

Última atualização: 15/10/2025
autor: Isaac
  • 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.

Trabalhando com Excel em Python

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.

Instalando pandas e openpyxl

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))

Lendo dados com pandas

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)

Formatação avançada com openpyxl

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.

  Descubra como verificar se alguém está usando o WhatsApp

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.

  Como executar scripts no PowerShell: um guia completo passo a passo

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.

  Aprenda como excluir uma série de contatos de um telefone Android

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.

UTF-8
Artigo relacionado:
Como abrir arquivos CSV no Excel com codificação UTF-8 e evitar erros