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!

5 min de leitura Equipe Python Brasil

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() e shape antes 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, use df.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.

E

Equipe Python Brasil

Contribuidor do Python Brasil — Aprenda Python em Português