Pandas — Series e DataFrame

En fase de pruebas Atividades: Esta sección está en validación y puede recibir ajustes.

Pandas tem duas estruturas centrais: Series (vetor rotulado) e DataFrame (tabela rotulada). Praticamente toda análise em Python passa por uma delas.

Series

Criar a partir de uma lista

import pandas as pd

s = pd.Series([10, 20, 30])
# 0    10
# 1    20
# 2    30
# dtype: int64

Por padrão, o índice é numérico (0, 1, 2). Definir índices nomeados torna o vetor mais expressivo:

s = pd.Series([10, 20, 30], index=["a", "b", "c"], name="quantidade")
s["b"]    # 20
s.name    # "quantidade"
s.index   # Index(['a', 'b', 'c'], dtype='object')
s.values  # array([10, 20, 30])

Criar a partir de um dicionário

A chave vira índice:

populacao = pd.Series({"SP": 46, "MG": 21, "RJ": 17})

Operações vetorizadas

Operações se aplicam elemento a elemento — sem for:

s * 2          # multiplica todos
s > 15         # Series booleana
s[s > 15]      # filtra elementos > 15
s.mean()       # média
s.sum()        # soma

DataFrame

Criar a partir de um dicionário de listas

A forma mais comum de criação manual:

df = pd.DataFrame({
    "titulo": ["NOTA 636/2008", "NOTA 637/2008", "NOTA 638/2008"],
    "data":   ["2008-08-12", "2008-08-13", "2008-08-14"],
    "horario":["14:30", "10:15", "09:00"],
})

Cada chave do dicionário vira uma coluna. Todas as listas precisam ter o mesmo tamanho.

Criar a partir de uma lista de dicionários

Útil quando os dados vêm de uma API ou de scraping (cada item da lista é uma “linha”):

registros = [
    {"titulo": "NOTA 636/2008", "data": "2008-08-12", "horario": "14:30"},
    {"titulo": "NOTA 637/2008", "data": "2008-08-13", "horario": "10:15"},
]
df = pd.DataFrame(registros)

Acessar colunas

Uma coluna é uma Series:

df["titulo"]               # Series
df.titulo                  # equivalente, sintaxe alternativa
df[["titulo", "data"]]     # subset com várias colunas (DataFrame)
⚠️ Aviso

df.titulo falha quando o nome da coluna contém espaços, hífens ou começa com número. df["nome da coluna"] funciona sempre — prefira o colchete.

Acessar linhas

Pandas tem dois acessadores principais:

AcessadorIndexa porExemplo
.loc[]Rótulo do índicedf.loc[0], df.loc[df["data"] > "2008-08-12"]
.iloc[]Posição numéricadf.iloc[0], df.iloc[0:3]
df.loc[0]              # primeira linha (índice rótulo 0)
df.iloc[-1]            # última linha (posição -1)
df.loc[0, "titulo"]    # célula específica

Atributos básicos

AtributoO que devolve
df.shapeTupla (linhas, colunas)
df.columnsIndex com os nomes das colunas
df.indexIndex das linhas
df.dtypesTipo de cada coluna
df.valuesArray NumPy com os dados (sem rótulos)

Os próximos capítulos exploram esses atributos com exemplos reais a partir do notas_mre.json produzido pela trilha de coleta.