O pandas é a biblioteca padrão para manipulação de dados tabulares em Python. Se você já trabalhou com planilhas, a ideia é a mesma — só que programável, reproduzível e capaz de lidar com milhões de linhas.
Instalação
pip install pandasE, por convenção, o import é sempre com o apelido pd:
import pandas as pdAs duas estruturas centrais
Series — uma coluna
Uma Series é um vetor unidimensional com um índice (rótulos das linhas).
temperaturas = pd.Series(
[28.1, 30.4, 27.9, 31.2],
index=["seg", "ter", "qua", "qui"],
name="temperatura",
)
temperaturas["ter"] # 30.4
temperaturas.mean() # 29.4
temperaturas > 30 # Series de booleanosDataFrame — a tabela
Um DataFrame é um conjunto de Series que compartilham o mesmo índice: linhas e colunas, como uma planilha.
df = pd.DataFrame({
"cidade": ["São Paulo", "Rio", "Curitiba", "Recife"],
"populacao_mi": [12.3, 6.7, 1.9, 1.7],
"regiao": ["Sudeste", "Sudeste", "Sul", "Nordeste"],
})Lendo dados de verdade
Na prática você raramente digita os dados à mão. O pandas lê dezenas de formatos:
df = pd.read_csv("dados.csv")
df = pd.read_excel("planilha.xlsx", sheet_name="2026")
df = pd.read_parquet("dados.parquet")Primeiro contato com qualquer tabela nova:
df.head() # primeiras linhas
df.shape # (linhas, colunas)
df.info() # tipos e valores nulos
df.describe() # estatísticas das colunas numéricasSelecionando e filtrando
df["populacao_mi"] # uma coluna (Series)
df[["cidade", "regiao"]] # várias colunas (DataFrame)
df.loc[0] # linha pelo rótulo do índice
df.iloc[0] # linha pela posição
# filtro por condição (boolean indexing)
df[df["populacao_mi"] > 5]
# combinando condições: use & | e parênteses
df[(df["regiao"] == "Sudeste") & (df["populacao_mi"] > 10)]Criando colunas
df["populacao_abs"] = df["populacao_mi"] * 1_000_000
df["porte"] = df["populacao_mi"].apply(
lambda p: "grande" if p >= 5 else "médio" if p >= 2 else "pequeno"
)Agrupando: split-apply-combine
O groupby é o coração da análise exploratória: divide os dados por uma chave, aplica uma agregação e junta o resultado.
df.groupby("regiao")["populacao_mi"].sum()
df.groupby("regiao").agg(
n_cidades=("cidade", "count"),
pop_total=("populacao_mi", "sum"),
pop_media=("populacao_mi", "mean"),
)Valores ausentes
df.isna().sum() # nulos por coluna
df.dropna(subset=["populacao_mi"])
df["regiao"].fillna("desconhecida")Resumo
Series= coluna;DataFrame= tabela.read_csv/read_excel/read_parquetpara carregar dados.head,info,describepara o primeiro diagnóstico.loc/iloce boolean indexing para recortar.groupby+aggpara resumir.
A documentação oficial tem um guia “10 minutes to pandas” que vale a leitura depois deste post.