Como exportar um DataFrame para Excel com pandas em Python
Exportar um DataFrame para Excel com pandas é uma das formas mais rápidas de partilhar resultados de análise com colegas que vivem no Excel. Em vez de enviares dados em bruto, entregas um ficheiro .xlsx limpo, com as colunas certas e pronto a abrir. Este guia mostra como fazê-lo, desde o caso mais simples até gravar várias folhas no mesmo ficheiro.
Pré-requisitos
- Python 3.9 ou superior instalado.
- As bibliotecas
pandaseopenpyxl(oopenpyxlé o motor que escreve ficheiros .xlsx). - Um DataFrame com dados. Neste exemplo criamos um a partir de um dicionário, mas serve qualquer origem: CSV, base de dados ou API.
Passo 1: Instalar pandas e openpyxl
Antes de exportar para Excel, garante que tens as duas bibliotecas instaladas. O pandas trata dos dados e o openpyxl escreve o formato .xlsx que o Excel abre. Se usas ambientes virtuais, ativa o teu ambiente antes de instalar.
pip install pandas openpyxl
Passo 2: Criar ou carregar o DataFrame
Para o exemplo usamos um pequeno DataFrame de vendas. Na prática, estes dados podem vir de um ficheiro CSV, de uma consulta SQL ou de uma API — o passo de exportação é sempre igual, seja qual for a origem dos dados.
import pandas as pd
dados = {
"Produto": ["Teclado", "Rato", "Monitor"],
"Unidades": [12, 30, 8],
"Preco": [19.90, 9.50, 149.00],
}
df = pd.DataFrame(dados)
print(df)
Passo 3: Exportar o DataFrame para Excel
A exportação básica usa o método to_excel. O parâmetro index=False evita gravar a coluna de índice do pandas, que quase nunca interessa no ficheiro final e costuma confundir quem abre a folha.
df.to_excel("vendas.xlsx", index=False)
Isto cria um ficheiro vendas.xlsx na mesma pasta do script, com uma folha chamada "Sheet1". Para dares um nome à folha, usa o parâmetro sheet_name:
df.to_excel("vendas.xlsx", sheet_name="Vendas", index=False)
Se aparecer o erro "No module named 'openpyxl'", instala o motor com pip install openpyxl. É ele que o pandas usa para escrever ficheiros .xlsx.
Passo 4: Gravar vários DataFrames em folhas diferentes
Cada chamada a to_excel com um nome de ficheiro cria um livro novo e substitui o anterior. Por isso, para juntar mais do que uma tabela no mesmo ficheiro — por exemplo, um detalhe e um resumo — usamos o ExcelWriter como gestor de contexto (bloco with). Cada DataFrame escreve na sua própria folha.
resumo = df.groupby("Produto")["Unidades"].sum().reset_index()
with pd.ExcelWriter("relatorio.xlsx", engine="openpyxl") as writer:
df.to_excel(writer, sheet_name="Detalhe", index=False)
resumo.to_excel(writer, sheet_name="Resumo", index=False)
O bloco with garante que o ficheiro é gravado e fechado corretamente no fim, sem precisares de chamar nenhum método de gravação manualmente.
Passo 5: Escolher colunas e tratar valores em falta
O método to_excel aceita parâmetros úteis para afinar o resultado: columns escolhe e ordena as colunas a exportar, na_rep substitui valores em falta por um texto à tua escolha e startrow deixa linhas livres no topo (por exemplo, para um título).
df.to_excel(
"vendas.xlsx",
sheet_name="Vendas",
index=False,
columns=["Produto", "Unidades"],
na_rep="s/ dados",
)
Verificar o resultado
Abre o ficheiro gerado no Excel e confirma que os dados aparecem nas folhas certas e sem a coluna de índice. Se preferires validar em código, volta a ler o ficheiro com pandas e compara com o original:
verificacao = pd.read_excel("vendas.xlsx", sheet_name="Vendas")
print(verificacao.head())
Se o resultado mostrar as mesmas linhas que exportaste, a exportação correu bem.
Conclusão
Com to_excel e ExcelWriter passas de dados em Python para relatórios em Excel em poucas linhas, o que é ideal para partilhar resultados com quem não programa. Como próximos passos, experimenta automatizar um relatório semanal ou aplicar formatação avançada — larguras de coluna e cores — diretamente com o openpyxl. Que tarefa repetitiva da tua equipa poderias eliminar gravando o resultado diretamente em Excel?