Programador Leigo
Pandas 13 min leitura 15 MAR 2026

Pandas: manipulação e análise de dados com Python

Aprenda a carregar, limpar, filtrar e transformar dados com Pandas. A ferramenta essencial de Data Science.


O que é Pandas?

Pandas é a biblioteca mais importante para análise de dados em Python. Pense nela como um Excel turbinado: você pode carregar planilhas, filtrar dados, fazer cálculos e gerar relatórios, tudo com poucas linhas de código.

O nome vem de "Panel Data", um termo de econometria para dados multidimensionais. A biblioteca foi criada em 2008 por Wes McKinney e hoje é usada por milhões de profissionais no mundo todo.

import pandas as pd

A convenção é importar Pandas como pd. Você vai ver isso em todo código de Data Science.

Series vs DataFrame

Pandas tem duas estruturas principais:

Series — Uma coluna de dados com índice. Pense como uma lista com rótulos.

import pandas as pd

notas = pd.Series([7.5, 8.0, 6.5, 9.0], index=["Ana", "Bruno", "Carol", "Diego"])
print(notas)
# Ana      7.5
# Bruno    8.0
# Carol    6.5
# Diego    9.0
# dtype: float64

DataFrame — Uma tabela com linhas e colunas. É a estrutura que você mais vai usar.

import pandas as pd

dados = {
    "nome": ["Ana", "Bruno", "Carol", "Diego"],
    "idade": [22, 25, 21, 28],
    "nota": [7.5, 8.0, 6.5, 9.0]
}

df = pd.DataFrame(dados)
print(df)
#     nome  idade  nota
# 0    Ana     22   7.5
# 1  Bruno     25   8.0
# 2  Carol     21   6.5
# 3  Diego     28   9.0

Lendo dados de arquivos

Na vida real, você raramente cria DataFrames na mão. O mais comum é carregar dados de arquivos:

import pandas as pd

# CSV (o formato mais comum)
df = pd.read_csv("vendas.csv")

# Excel
df = pd.read_excel("relatorio.xlsx")

# JSON
df = pd.read_json("dados.json")

# Com separador diferente (ponto e virgula, comum em CSVs brasileiros)
df = pd.read_csv("dados.csv", sep=";", encoding="utf-8")

Para este artigo, vamos criar um dataset de exemplo:

import pandas as pd

dados = {
    "funcionario": ["Ana", "Bruno", "Carol", "Diego", "Eva",
                    "Felipe", "Gabi", "Hugo", "Iris", "Jonas"],
    "departamento": ["TI", "RH", "TI", "Vendas", "RH",
                     "TI", "Vendas", "TI", "RH", "Vendas"],
    "salario": [5500, 4200, 6100, 3800, 4500,
                7200, 4100, 5800, 4300, 3900],
    "anos_empresa": [3, 5, 7, 2, 4, 10, 1, 6, 3, 2],
    "avaliacao": [8.5, 7.0, 9.0, 6.5, 7.5, 9.5, None, 8.0, None, 7.0]
}

df = pd.DataFrame(dados)

Explorando os dados

Antes de qualquer análise, você precisa entender seus dados. Pandas oferece vários métodos para isso:

# Primeiras 5 linhas
print(df.head())

# Ultimas 3 linhas
print(df.tail(3))

# Dimensoes do DataFrame
print(df.shape)  # (10, 5) -> 10 linhas, 5 colunas

# Tipos de dados e valores nao nulos
print(df.info())

# Estatisticas descritivas das colunas numericas
print(df.describe())

# Nomes das colunas
print(df.columns.tolist())

O método describe() retorna uma tabela completa com contagem, média, desvio padrão, mínimo, quartis e máximo:

Estatística salario anos_empresa avaliacao
count 10.0 10.0 8.0
mean 4940.0 4.3 7.875
std 1110.2 2.75 1.01
min 3800.0 1.0 6.5
max 7200.0 10.0 9.5

Selecionando colunas e linhas

Selecionando colunas

# Uma coluna (retorna Series)
nomes = df["funcionario"]

# Varias colunas (retorna DataFrame)
subset = df[["funcionario", "salario"]]

Selecionando linhas com loc e iloc

# loc: seleciona por rotulo (nome do indice)
print(df.loc[0])              # Linha com indice 0
print(df.loc[0:3])            # Linhas de 0 a 3 (inclui o 3!)
print(df.loc[0, "funcionario"])  # Valor especifico

# iloc: seleciona por posicao (numero inteiro)
print(df.iloc[0])             # Primeira linha
print(df.iloc[0:3])           # Primeiras 3 linhas (nao inclui o 3)
print(df.iloc[0, 0])          # Primeiro valor

A diferença principal: loc inclui o final do intervalo, iloc não inclui (como listas Python).

Filtrando dados com condições

Filtrar é uma das operações mais comuns. Use condições dentro dos colchetes:

# Funcionarios com salario acima de 5000
ricos = df[df["salario"] > 5000]
print(ricos)

# Funcionarios do departamento de TI
ti = df[df["departamento"] == "TI"]
print(ti)

# Combinando condicoes (use & para "e", | para "ou")
ti_senior = df[(df["departamento"] == "TI") & (df["anos_empresa"] >= 5)]
print(ti_senior)

# Filtrar por lista de valores
vendas_rh = df[df["departamento"].isin(["Vendas", "RH"])]
print(vendas_rh)

# Filtrar por texto (contem determinada string)
nomes_com_a = df[df["funcionario"].str.startswith("A")]
print(nomes_com_a)

Lidando com dados ausentes

Dados do mundo real quase sempre têm valores faltantes. Pandas usa NaN (Not a Number) para representar ausências:

# Verificar quais valores estao ausentes
print(df.isna())

# Contar valores ausentes por coluna
print(df.isna().sum())
# funcionario      0
# departamento     0
# salario          0
# anos_empresa     0
# avaliacao        2

# Preencher valores ausentes com a media
df["avaliacao"] = df["avaliacao"].fillna(df["avaliacao"].mean())

# Ou remover linhas com valores ausentes
df_limpo = df.dropna()

# Remover linhas onde uma coluna especifica e nula
df_limpo = df.dropna(subset=["avaliacao"])

GroupBy: agrupamento e agregações

O groupby é um dos recursos mais poderosos do Pandas. Ele permite agrupar dados por uma coluna e calcular estatísticas para cada grupo:

# Media salarial por departamento
print(df.groupby("departamento")["salario"].mean())
# departamento
# RH        4333.33
# TI        6150.00
# Vendas    3933.33

# Varias estatisticas de uma vez
resumo = df.groupby("departamento")["salario"].agg(["mean", "min", "max", "count"])
print(resumo)

# Agrupar e agregar varias colunas
resumo_completo = df.groupby("departamento").agg({
    "salario": "mean",
    "anos_empresa": "mean",
    "avaliacao": "mean"
}).round(1)
print(resumo_completo)

Ordenando dados

# Ordenar por salario (crescente)
df_ordenado = df.sort_values("salario")

# Ordenar por salario (decrescente)
df_ordenado = df.sort_values("salario", ascending=False)

# Ordenar por multiplas colunas
df_ordenado = df.sort_values(["departamento", "salario"], ascending=[True, False])

Criando novas colunas

Você pode criar colunas calculadas a partir de outras:

# Salario anual
df["salario_anual"] = df["salario"] * 13  # Com 13o salario

# Faixa salarial usando apply
def classificar_salario(valor):
    if valor >= 6000:
        return "Alto"
    elif valor >= 4500:
        return "Medio"
    else:
        return "Baixo"

df["faixa"] = df["salario"].apply(classificar_salario)
print(df[["funcionario", "salario", "faixa"]])

Merge: juntando DataFrames

Assim como JOIN no SQL, o Pandas permite combinar DataFrames:

import pandas as pd

# DataFrame de funcionarios
funcionarios = pd.DataFrame({
    "id": [1, 2, 3, 4],
    "nome": ["Ana", "Bruno", "Carol", "Diego"],
    "depto_id": [10, 20, 10, 30]
})

# DataFrame de departamentos
departamentos = pd.DataFrame({
    "depto_id": [10, 20, 30],
    "depto_nome": ["TI", "RH", "Vendas"]
})

# Juntar os dois DataFrames
resultado = pd.merge(funcionarios, departamentos, on="depto_id")
print(resultado)
#    id   nome  depto_id depto_nome
# 0   1    Ana        10         TI
# 1   2  Bruno        20         RH
# 2   3  Carol        10         TI
# 3   4  Diego        30     Vendas

Tipos de merge disponíveis:

Tipo Descrição
inner Apenas registros presentes em ambos (padrão)
left Todos do DataFrame da esquerda
right Todos do DataFrame da direita
outer Todos de ambos os DataFrames
resultado = pd.merge(funcionarios, departamentos, on="depto_id", how="left")

Exemplo prático: análise de vendas

Vamos fazer uma análise completa com Pandas:

import pandas as pd

# Criando dataset de vendas
vendas = pd.DataFrame({
    "data": pd.date_range("2026-01-01", periods=20, freq="D"),
    "produto": ["Notebook", "Mouse", "Teclado", "Monitor"] * 5,
    "quantidade": [2, 15, 8, 3, 1, 20, 10, 2, 3, 12,
                   6, 4, 2, 18, 9, 1, 4, 25, 7, 3],
    "preco_unitario": [3500, 80, 150, 1200] * 5
})

# Calcular faturamento
vendas["faturamento"] = vendas["quantidade"] * vendas["preco_unitario"]

# Resumo por produto
resumo = vendas.groupby("produto").agg({
    "quantidade": "sum",
    "faturamento": "sum"
}).sort_values("faturamento", ascending=False)

print("=== Faturamento por Produto ===")
print(resumo)
print()

# Dia com maior faturamento
melhor_dia = vendas.groupby("data")["faturamento"].sum().idxmax()
print(f"Dia com maior faturamento: {melhor_dia.strftime('%d/%m/%Y')}")

# Faturamento total
total = vendas["faturamento"].sum()
print(f"Faturamento total: R$ {total:,.2f}")

# Exportar resultado para CSV
resumo.to_csv("resumo_vendas.csv")
print("\nArquivo 'resumo_vendas.csv' salvo com sucesso!")

Resumo dos comandos

Operação Comando
Ler CSV pd.read_csv("arquivo.csv")
Primeiras linhas df.head()
Informações df.info()
Estatísticas df.describe()
Selecionar coluna df["coluna"]
Filtrar df[df["coluna"] > valor]
Valores nulos df.isna().sum()
Preencher nulos df.fillna(valor)
Agrupar df.groupby("coluna").mean()
Ordenar df.sort_values("coluna")
Nova coluna df["nova"] = df["a"] + df["b"]
Juntar tabelas pd.merge(df1, df2, on="chave")
Salvar CSV df.to_csv("arquivo.csv")

Conclusão

Pandas é a ferramenta que vai acompanhar você em praticamente todo projeto de Data Science. Com ela, você consegue carregar dados de qualquer fonte, limpar inconsistências, filtrar e agrupar informações, e extrair insights valiosos. Os conceitos que vimos aqui — DataFrame, seleção, filtragem, groupby e merge — são a base para qualquer análise. No próximo artigo, vamos aprender a transformar esses dados em gráficos profissionais com Matplotlib e Seaborn.

Continue lendo

Compartilhar