Excel e CSV são as moedas de troca mais comuns em análise de dados no Brasil. Saber ler e escrever esses formatos corretamente — com encoding correto, formatação profissional e múltiplas abas — é uma habilidade diária para qualquer analista que usa Python.
Lendo CSV: opções essenciais
import pandas as pd
# CSV simples:
df = pd.read_csv("dados.csv")
# CSV brasileiro (ponto e vírgula, vírgula decimal):
df = pd.read_csv("dados.csv",
sep=";",
decimal=",",
encoding="latin-1", # ou "utf-8"
parse_dates=["data"], # converte coluna para datetime
dayfirst=True # interpreta DD/MM/AAAA
)
# Ler apenas colunas específicas:
df = pd.read_csv("dados.csv", usecols=["cliente", "valor", "data"])
# Ler em chunks para arquivos grandes:
chunks = pd.read_csv("grande.csv", chunksize=100000)
df = pd.concat(chunks, ignore_index=True)
Escrevendo CSV
# Padrão internacional:
df.to_csv("resultado.csv", index=False)
# Compatível com Excel brasileiro:
df.to_csv("resultado.csv",
sep=";",
decimal=",",
index=False,
encoding="utf-8-sig" # BOM para Excel abrir com acentos corretos
)
Lendo Excel
pip install openpyxl
# Aba específica:
df = pd.read_excel("relatorio.xlsx", sheet_name="Vendas")
# Todas as abas de uma vez (retorna dicionário):
dfs = pd.read_excel("relatorio.xlsx", sheet_name=None)
for nome_aba, df in dfs.items():
print(f"{nome_aba}: {len(df)} linhas")
# Ignorar linhas de cabeçalho extra:
df = pd.read_excel("relatorio.xlsx", header=2) # cabeçalho na 3ª linha
Escrevendo Excel: múltiplas abas
with pd.ExcelWriter("relatorio.xlsx", engine="openpyxl") as writer:
df_sul.to_excel(writer, sheet_name="Sul", index=False)
df_norte.to_excel(writer, sheet_name="Norte", index=False)
resumo.to_excel(writer, sheet_name="Resumo", index=False)
Formatando Excel com openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = load_workbook("relatorio.xlsx")
ws = wb["Vendas"]
# Formatando o cabeçalho:
for cell in ws[1]:
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(fill_type="solid", fgColor="1A3A6E")
cell.alignment = Alignment(horizontal="center")
# Ajustando largura das colunas:
for col in ws.columns:
max_len = max(len(str(cell.value or "")) for cell in col)
ws.column_dimensions[col[0].column_letter].width = max_len + 4
wb.save("relatorio_formatado.xlsx")
Perguntas frequentes
Por que meu CSV abre com caracteres errados no Excel?
Dois problemas comuns: (1) encoding errado — use encoding="utf-8-sig" ao salvar para que o Excel detecte UTF-8 com BOM; (2) separador errado — o Excel brasileiro usa ponto e vírgula. Use sep=";".
xlrd vs openpyxl: qual usar?
Use openpyxl para arquivos .xlsx (o padrão moderno). xlrd só suporta o formato antigo .xls. Configure com engine="openpyxl" no read_excel e ExcelWriter.