Introdução ao Pandas Python — 2025 | Python Brasil
Aprenda Pandas para análise de dados em Python. DataFrames, filtros, agrupamentos e visualização. Comece agora!
Pandas é a biblioteca mais popular para análise e manipulação de dados em Python. Criada por Wes McKinney em 2008, tornou-se ferramenta indispensável para cientistas de dados, analistas e engenheiros de dados ao redor do mundo. Com Pandas, é possível carregar, limpar, transformar e analisar grandes volumes de dados com apenas algumas linhas de código.
Neste artigo, vamos explorar os fundamentos do Pandas, desde a criação de DataFrames até operações avançadas de agrupamento e análise estatística.
Instalação e importação
Para instalar o Pandas, use o pip:
# No terminal:
# pip install pandas
import pandas as pd
A convenção de importar como pd é universalmente adotada pela comunidade e facilita a leitura do código.
Series e DataFrames
O Pandas possui duas estruturas de dados principais: Series (unidimensional) e DataFrame (bidimensional, como uma tabela).
import pandas as pd
# Series: uma coluna de dados
notas = pd.Series([8.5, 7.0, 9.2, 6.8, 8.0], name="Notas")
print(notas)
print(f"Média: {notas.mean():.2f}")
# DataFrame: uma tabela completa
dados = {
"Nome": ["Ana", "Bruno", "Carla", "Diego", "Eva"],
"Idade": [25, 30, 28, 22, 35],
"Cidade": ["São Paulo", "Rio de Janeiro", "Belo Horizonte", "Curitiba", "Salvador"],
"Salário": [5500, 7200, 6100, 4800, 8900]
}
df = pd.DataFrame(dados)
print(df)
O DataFrame é a estrutura mais utilizada no dia a dia. Pense nele como uma planilha com linhas e colunas nomeadas, mas com o poder de processamento do Python por trás.
Carregando dados de arquivos
Na prática, raramente criamos DataFrames manualmente. O mais comum é carregar dados de arquivos externos:
import pandas as pd
# Lendo CSV
df_csv = pd.read_csv("vendas.csv", encoding="utf-8", sep=",")
# Lendo Excel
df_excel = pd.read_excel("relatorio.xlsx", sheet_name="Dados")
# Lendo JSON
df_json = pd.read_json("dados.json")
# Explorando os dados carregados
print(f"Dimensões: {df_csv.shape}") # (linhas, colunas)
print(f"Colunas: {list(df_csv.columns)}")
print(df_csv.head()) # Primeiras 5 linhas
print(df_csv.describe()) # Estatísticas descritivas
print(df_csv.info()) # Tipos e valores nulos
O método describe() é especialmente útil como primeiro passo na análise exploratória, pois resume estatísticas como média, desvio padrão, mínimo e máximo de todas as colunas numéricas.
Seleção e filtragem de dados
Selecionar e filtrar dados é uma das operações mais frequentes:
import pandas as pd
df = pd.DataFrame({
"Produto": ["Notebook", "Mouse", "Teclado", "Monitor", "Headset",
"Webcam", "SSD", "RAM"],
"Categoria": ["Computador", "Periférico", "Periférico", "Computador",
"Periférico", "Periférico", "Componente", "Componente"],
"Preco": [3500, 89, 159, 1299, 249, 199, 399, 289],
"Estoque": [15, 200, 150, 30, 80, 45, 60, 90]
})
# Selecionando colunas
precos = df["Preco"]
info_produto = df[["Produto", "Preco"]]
# Filtrando linhas
caros = df[df["Preco"] > 500]
print("Produtos acima de R$ 500:")
print(caros)
# Filtros combinados
perifericos_baratos = df[(df["Categoria"] == "Periférico") & (df["Preco"] < 200)]
print("\nPeriféricos abaixo de R$ 200:")
print(perifericos_baratos)
# Usando query (mais legível para filtros complexos)
resultado = df.query("Preco > 100 and Estoque >= 50")
print("\nProdutos com preço > 100 e estoque >= 50:")
print(resultado)
Transformação e limpeza de dados
Dados do mundo real quase sempre precisam de limpeza e transformação antes da análise:
import pandas as pd
import numpy as np
df = pd.DataFrame({
"Nome": ["Ana Silva", "Bruno Costa", None, "Diana Reis", "Eva Lima"],
"Email": ["ANA@EMAIL.COM", "bruno@email.com", "carla@email.com",
"diana@email.com", None],
"Salário": [5500, None, 6100, 4800, 8900],
"Data_Admissão": ["2023-01-15", "2022-06-01", "2024-03-10",
"2023-09-20", "2021-11-05"]
})
# Verificando valores nulos
print(df.isnull().sum())
# Preenchendo valores nulos
df["Salário"] = df["Salário"].fillna(df["Salário"].mean())
df["Nome"] = df["Nome"].fillna("Desconhecido")
# Removendo linhas com qualquer valor nulo restante
df = df.dropna()
# Transformando tipos
df["Data_Admissão"] = pd.to_datetime(df["Data_Admissão"])
# Criando novas colunas
df["Email_Normalizado"] = df["Email"].str.lower()
df["Ano_Admissão"] = df["Data_Admissão"].dt.year
# Aplicando funções personalizadas
df["Faixa_Salarial"] = df["Salário"].apply(
lambda x: "Alta" if x > 7000 else "Média" if x > 5000 else "Inicial"
)
print(df)
Agrupamento e agregação
O método groupby é uma das ferramentas mais poderosas do Pandas, equivalente ao GROUP BY do SQL:
import pandas as pd
vendas = pd.DataFrame({
"Vendedor": ["Ana", "Bruno", "Ana", "Carla", "Bruno",
"Ana", "Carla", "Bruno", "Carla", "Ana"],
"Região": ["SP", "RJ", "SP", "MG", "RJ",
"SP", "MG", "RJ", "MG", "SP"],
"Produto": ["A", "B", "B", "A", "A", "C", "B", "C", "A", "A"],
"Valor": [1500, 2200, 1800, 1200, 2500,
900, 1700, 2100, 1400, 1600]
})
# Agrupando por vendedor
por_vendedor = vendas.groupby("Vendedor")["Valor"].agg(["sum", "mean", "count"])
por_vendedor.columns = ["Total", "Média", "Qtd_Vendas"]
print("Vendas por vendedor:")
print(por_vendedor)
# Agrupando por múltiplas colunas
por_regiao_produto = vendas.groupby(["Região", "Produto"])["Valor"].sum()
print("\nVendas por região e produto:")
print(por_regiao_produto)
# Tabela dinâmica (pivot table)
tabela = vendas.pivot_table(
values="Valor",
index="Vendedor",
columns="Região",
aggfunc="sum",
fill_value=0
)
print("\nTabela dinâmica:")
print(tabela)
Ordenação e ranking
import pandas as pd
df = pd.DataFrame({
"Aluno": ["Ana", "Bruno", "Carla", "Diego", "Eva"],
"Nota_Final": [8.5, 7.2, 9.1, 6.8, 8.5]
})
# Ordenando por nota (decrescente)
df_ordenado = df.sort_values("Nota_Final", ascending=False)
print(df_ordenado)
# Adicionando ranking
df_ordenado["Posição"] = range(1, len(df_ordenado) + 1)
print(df_ordenado)
Exportando resultados
Depois de processar os dados, você pode exportá-los em diversos formatos:
import pandas as pd
# Supondo que df é seu DataFrame processado
# df.to_csv("resultado.csv", index=False, encoding="utf-8")
# df.to_excel("resultado.xlsx", index=False, sheet_name="Dados")
# df.to_json("resultado.json", orient="records", force_ascii=False)
Boas práticas com Pandas
Para trabalhar de forma eficiente com Pandas:
- Explore os dados primeiro: use
head(),info(),describe()eshapeantes de processar. - Evite loops: operações vetorizadas do Pandas são muito mais rápidas que iterações com
for. - Use
copy(): ao criar subconjuntos, usedf.copy()para evitar o SettingWithCopyWarning. - Trabalhe com tipos corretos: converta datas para datetime e categorias para o tipo category para economizar memória.
- Encadeie operações: o Pandas suporta method chaining, o que torna o código mais legível.
Conclusão
Pandas é uma ferramenta essencial para qualquer pessoa que trabalhe com dados em Python. Neste artigo, cobrimos os fundamentos que vão permitir a você carregar, limpar, transformar e analisar dados de forma eficiente. A curva de aprendizado inicial é suave, mas o Pandas é profundo o suficiente para atender até as demandas mais complexas.
Os próximos passos naturais são aprender Matplotlib ou Seaborn para visualização dos dados processados, e explorar técnicas avançadas como merge de DataFrames, operações com janelas temporais e otimização de memória para datasets grandes.
Equipe Python Brasil
Contribuidor do Python Brasil — Aprenda Python em Português