Aula 07 — Python, Pandas & NumPy (ler código: o ponto órfão que ninguém pega)

Sou o Camilo, teu professor de TI. Chegamos no tema mais estranho da série — e também no mais barato de blindar. Aqui a gente NÃO vai virar programador. A gente vai aprender a ler um código de 4 linhas e dizer o que ele faz. É só isso que a FCC pede. Pega firme num ponto: a leitura de Pandas. O resto é seguro.


🩸 Por que ESTA aula vale ouro (e por que é uma APOSTA, não um fato)


🏅 Depoimento de aprovado

Hueliton Fontes — 26º lugar SEFAZ-AP (FCC), 42 anos, ex-militar, partiu do ZERO em TI.


🏅 Depoimento de aprovado

Gabriel Santana — 1º lugar SEFAZ-GO 2026 (FCC). (GO é o espelho do edital do CE.)


🗺️ MINI-MAPA DA SÉRIE — onde esta aula mora

Aula Tema 💰 Peso
00 Fundamentos (tipos de dado, DIKW, ciclo de vida) 🛡️ blindagem · ✅ no ar
01 CRISP-DM (as 6 fases na ordem) 🥉 alto · ✅ no ar
02 Arquitetura & Eng. de Dados (DW/Lake/Lakehouse, ETL×ELT, OLAP, DAG) 🥇 ouro
03 Banco de Dados & SQL (relacional, normalização, NoSQL, SQL na mão) 🥇 OURO
04 Machine Learning & IA (sup × não-sup, clusterização, over/underfit, Lasso/Ridge) 👑 OURO MÁXIMO (7 de 11 em SP)
05 Governança & Ética de Dados (qualidade, viés, IA generativa) 🟡 médio
06 Segurança / LGPD / Sigilo Fiscal (CID, LGPD, CTN 198 + IN SEFAZ-CE 92/21) 🟡 médio
07 ⬅️ (esta) Python / Pandas / NumPy (ler código) 👻 órfão eliminatório (hedge)

🔑 Leitura do mapa: o ouro de pontos está nas Aulas 02-04 (arquitetura, SQL, ML). Esta Aula 07 é a apólice de seguro — você a estuda DEPOIS de blindar o ouro, mas ela existe porque, se a FCC trouxer Pandas (como fez em MT), o concorrente que pulou Python zera essas questões e você pega sozinho.


O PLACAR DOS PROFESSORES — quem cobriu Python (faro FCC)

Eles são INSUMO — a palavra final é minha. Faro = quão bem cada um previu o que a FCC 2026 cobrou de Python.

Prof Faro p/ Python Confie nele para...
Felipe Mathias (TI Descompl.) 10/10 A ÚNICA fonte real. Guia "Python para Concursos" — sintaxe, listas, recursão, NumPy, Pandas. Tudo que esta aula usa sai dele.
Lucas Ianni (Estratégia) 2/10 ⚠️ tinha o material (Pandas/NumPy, "Parte 5-6") mas NÃO destilou na reta final — o maior buraco do acervo.
Renato da Costa (prof da reta final do CE no Estratégia) 0/10 ❌ empurrou SQL/Python "pra aula 2" e não cobriu — e a prova cobrou.
Demais cursinhos 0/10 ⚪ Python foi órfão total nas reta-finais.

⚠️ HONESTIDADE OBRIGATÓRIA: este é o tema com o maior abismo entre o que caiu e o que foi ensinado. Caiu pesado (MT: 5q de Python/Pandas + 1 de ETL em Pandas) e ninguém ensinou (só o Mathias, num guia que a maioria nem viu). É exatamente por isso que vale o nosso 1h: onde todo mundo está cego, quem enxerga um pouquinho já lidera.


🧠 BIZU DA BANCA — como a FCC cobra Python

🔑 Bordão da aula: na FCC, Python não se escreve — se LÊ. Traduz o código pra português e marca o que faz o que o requisito pede.


📑 SUMÁRIO — os blocos desta aula

  1. Bloco 1 — Sintaxe-base (a base barata): tipos, listas/dicionários, fatiamento, for, def, list comprehension — só o necessário pra ler o resto.

  2. Bloco 2 — NumPy: array × lista, vetorização (operação elemento a elemento), dimensões pelos colchetes.

  3. Bloco 3 — PANDAS, o coração 🔴: Series/DataFrame, loc/iloc, filtro booleano, groupby + agg, pd.Grouper(freq='M'), merge/join (how=left/inner/outer), resample, pivot_table, dicionário acumulador, apply. É onde mora o ponto.

  4. Bloco 4 — Visualização (matplotlib/seaborn) 🟡: gráfico de linha = série temporal · boxplot = outliers · histograma.

  5. Bloco 5 — Ler código na prova: o método de tradução linha a linha + drill das 6 questões de MT (5 Pandas + 1 ETL em Pandas).


▶️ Próximo (Bloco 1): a sintaxe mínima pra você ler Pandas sem travar. Não é pra decorar — é pra reconhecer. Bora.


Bloco 1 — SINTAXE-BASE (a base barata 🟢)

🎯 O que travar neste bloco (só o que serve pra LER código):


🎬 Caso prático — a planilha de ICMS do Guilherme vira código

O Guilherme (seu amigo auditor) tem uma lista dos valores de ICMS de 5 contribuintes da malha fiscal. Em Python isso é uma lista:

icms = [80000, 1500, 230000, 90, 45000]

Ele quer só o primeiro e os três do meio. Aqui mora a pegadinha que persegue o Python inteiro:

🪤 A regra de ouro de TODO o Python (Mathias, literal): o valor que ABRE o intervalo entra; o que FECHA, NÃO entra. Vale pra range, pra fatiamento [i:f], pra tudo. icms[1:4] para no 3. É a pegadinha nº 1.


🧊 AS 3 COLEÇÕES QUE VOCÊ PRECISA RECONHECER (decore o delimitador)

Coleção Cara dela Mutável? Acessa por Na sua mesa
lista (list) [80000, 1500, 90] colchetes ✅ sim índice [0] a fila de valores de ICMS
dicionário (dict) {"cnpj": "11...", "icms": 80000} chave:valor ✅ sim chave ["cnpj"] um registro de NF-e (campo→valor)
tupla (tuple) (80000, 1500) parênteses não índice [0] um par fixo que não muda

🔑 O macete visual (Mathias): olha o delimitador: [] = lista · {chave: valor} = dict · () = tupla. É só bater o olho.

🪤 PEGADINHA-OURO do dicionário: operação sobre dict por padrão usa as CHAVES, não os valores. sum(d) soma as chaves; pra somar valores é sum(d.values()). A FCC adora isso.


def (função) e for (repetição) — em 4 linhas

def total_icms(lista):          # 'def' DEFINE uma função chamada total_icms
    soma = 0
    for valor in lista:         # 'for' percorre CADA item da lista
        soma += valor           # soma += valor  é  soma = soma + valor
    return soma                 # 'return' devolve o resultado

List comprehension — o for compactado (a FCC está cobrando mais)

É um jeito curto de criar uma lista nova a partir de outra. Lê-se da direção do for:

icms = [80000, 1500, 230000, 90, 45000]
altos = [v for v in icms if v > 50000]   # "pega cada v de icms, SE v > 50000"
# resultado: [80000, 230000]

🪤 Posição do if (Mathias — decide a questão):


O PLACAR DOS PROFESSORES — Sintaxe Python

Leitura do Camilo: sintaxe pura (range, listas, recursão) é o que o Mathias mais detalha no guia, porque cai em concurso geral. Pro nosso CE fiscal, a banca embrulha tudo em Pandas (Bloco 3) — então a sintaxe aqui é meio, não fim. Você decora o mínimo pra ler o Pandas e corre pro que dá ponto.

Prof Apostou? Veredito O que disse (literal do guia)
Felipe Mathias ✅ forte 🎯 base certa "Listas: de longe a mais cobrada — intervalo não inclui o fim" · "sum(dict) soma as chaves"

🪤 As pegadinhas de sintaxe que a FCC repete (do guia do Mathias):

  1. Intervalo nunca inclui o fim (range, slice) — exceto np.linspace.

  2. lista * 2 REPETE os elementos ([1,2]*2 = [1,2,1,2]); lista1 + lista2 CONCATENA (junta). Não é matemática.

  3. b = a (lista) = MESMO objeto (mexe num, mexe no outro); b = a[:] = CÓPIA independente. Caiu na SEFA-PA 2026 — "altíssimo nível".

  4. sum(dict) soma as CHAVES, não os valores.


🧊 GUARDE NO BOLSO (Bloco 1)

➡️ Próximo (Bloco 2): o NumPy — onde a operação matemática volta a funcionar "de verdade" (somar 3 a um array soma a cada elemento). É a ponte pro Pandas.


Bloco 2 — NumPy (a vetorização 🟢)

🎯 O que travar neste bloco (curtíssimo):


🎬 Caso prático — corrigindo o ICMS de uma carga inteira

A DABOA Comércio (a fictícia, sempre ela quando cheira fraude) declarou 4 valores de ICMS que precisam de um acréscimo fixo de R$ 100 de multa em cada. Com lista isso dá errado; com array NumPy funciona:

import numpy as np
valores = np.array([80000, 1500, 230000, 90])
valores + 100   # → array([80100, 1600, 230100, 190])  soma 100 em CADA um

Isso é vetorização: a conta cai em cima de todos os elementos de uma vez, sem for. Com uma lista comum, lista + 100 daria erro, e lista * 2 repetiria a lista — por isso o Pandas/NumPy existem pra dados.


🧊 NumPy — o mínimo decorável

Comando O que faz
np.array([1,2,3]) cria array 1D
np.zeros((2,3)) / np.ones((2,3)) matriz 2×3 de 0 / de 1
np.arange(0, 10, 2) como range, aceita decimais → [0,2,4,6,8]
np.linspace(0, 1, 5) n pontos igualmente espaçados — 🪤 INCLUI o último! (única exceção)
.shape / .ndim / .size (linhas, colunas) / nº de dimensões / total de elementos
arr[1:5] fatiamento (de novo: o 5 não entra)

🧠 Macete de dimensão (Mathias): conte os colchetes [ no INÍCIO → [ = 1D, [[ = 2D, [[[ = 3D.

🪤 A pegadinha que decide: np.linspace INCLUI o fim — é a ÚNICA exceção à regra de ouro ("intervalo não inclui o fim"). np.linspace(0, 10, 5) = [0, 2.5, 5, 7.5, 10] (o 10 entrou!). Já np.arange(0, 10, 2) para no 8.


O PLACAR DOS PROFESSORES — NumPy

Leitura do Camilo: o Mathias é a única fonte e diz que NumPy "cai muito" — em prova geral. Nas 3 provas fiscais de 2026 (MT/GO/SP) o NumPy não caiu isolado; o que caiu foi Pandas (que usa NumPy por baixo). Então: NumPy é 🟢 blindagem de 10 min (reconhecer np.array, vetorização, dimensão pelos colchetes) e segue pro Pandas, que é onde o ponto mora.

⚖️ NOTA DE HONESTIDADE (anti-invenção): este bloco não traz questão FCC com badge porque, conferido no banco, não há questão de NumPy puro nas safras fiscais FCC de 2026. As de NumPy do guia do Mathias são de outras bancas (FGV/Cespe/Fundatec). Por isso é 🟢 blindagem — reconhece e segue. O ponto está no Pandas.

🧊 GUARDE NO BOLSO (Bloco 2): np.array cria array · operação é elemento a elemento (vetorização) · dimensão = nº de [ · np.linspace inclui o fim.

➡️ Próximo (Bloco 3): o CORAÇÃO da aula — o Pandas. É onde caíram as 5 questões de Pandas de MT (+ a de ETL que também é Pandas). Pega firme aqui.


Bloco 3 — PANDAS, o CORAÇÃO 🔴 (onde mora o ponto)

🎯 O que travar neste bloco (é AQUI que decide):


🎬 Caso prático — a mesa do Guilherme, agora em DataFrame

O Guilherme tem dois "arquivos" abertos na fiscalização da DABOA:

  1. df_arrecadacao — arrecadação diária de ICMS, com coluna municipio e a data como índice. Milhares de linhas.

  2. df_cadastro — o cadastro de contribuintes, indexado por CNPJ.

E ele precisa de três coisas que a FCC transforma em questão:

É exatamente o que MT cobrou. Vamos ler cada ferramenta.


🧊 DATAFRAME — a tabela do Pandas (a caixa-mãe)

import pandas as pd
#         a tabela inteira        uma coluna (Series)
df["municipio"]          # acessa a coluna 'municipio'
df.loc["2026-01-15"]     # loc  = acessa por RÓTULO/nome do índice
df.iloc[0]               # iloc = acessa por POSIÇÃO (i de inteiro: 0,1,2...)
df[df["icms"] > 50000]   # FILTRO BOOLEANO: só as linhas com icms > 50 mil
Conceito É Cara
DataFrame a tabela toda (linhas × colunas) uma planilha
Series UMA coluna uma lista com rótulo
loc acessa por rótulo (nome) df.loc["CE"]
iloc acessa por posição (número) df.iloc[0] = 1ª linha
filtro booleano df[df[col] condição] a malha fiscal em código

🧠 Macete: iloc = i de Inteiro (posição 0,1,2). loc = de Label (o nome/rótulo). Se viu número de posição → iloc; se viu nome → loc.


3.1 — groupby + pd.Grouper(freq='M') ⭐ (o ponto-rei)

groupby = "junta as linhas que têm o mesmo valor numa coluna e agrega" (soma, média, contagem). É o GROUP BY do SQL (Aula 03) em Pandas.

df.groupby("municipio")["icms"].sum()   # total de ICMS POR município

E quando você quer agrupar por mês mantendo o índice de data? Aí entra o pd.Grouper(freq='M') — ele agrupa pela frequência mensal ('M'=mês, 'D'=dia, 'Y'=ano):

# total mensal POR município E POR mês, ao mesmo tempo:
df.groupby(["municipio", pd.Grouper(freq="M")])["icms"].sum()

🪤 A pegadinha-rei do Pandas (a ORDEM importa): a FCC troca a ordem das operações pra ver se você dorme. groupby().resample()resample().groupby() — fazer o errado primeiro mistura os meses ou ignora o município. E rolling('30D') aproxima o mês (janela de 30 dias corridos), enquanto pd.Grouper(freq='M') acerta o mês civil. "Aproximar" na alternativa = sinal de erro.


🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863384
1 toque = candidata · 2 toques = riscar (eliminei)

Em Python, utilizando a biblioteca Pandas, considere um DataFrame com arrecadação diária de ICMS, coluna municipio e índice datetime, e a necessidade de obter o total mensal por município sem perder granularidade temporal correta. Nesse caso, a operação que atende corretamente ao requisito apresentado é


3.2 — merge / join (cruzar tabelas) ⭐ (o 2º ponto)

Cruzar duas tabelas = o que o auditor faz o dia todo (NF-e × cadastro). Em SQL é o JOIN; em Pandas é merge (por coluna) ou join (por índice). O segredo é o how=:

🧊 OS TIPOS DE JOIN — how= (decore as 3 caixas)

how= O que mantém Caso fiscal
left TODAS as linhas da 1ª tabela (a da esquerda), case ou não manter todos os autos mesmo sem cadastro ⭐
inner só o que casa nas duas (interseção) só contribuintes que estão nos dois
outer tudo das duas (união) todos os autos e todos os cadastros
right todas as da 2ª (a da direita) (espelho do left)

🔑 O bizu fiscal: "preservar TODOS os autos mesmo sem cadastro"LEFT (autos é a tabela da esquerda; mantém todos). Quem manda na palavra é o "preservar todos de uma das tabelas".


🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863421
1 toque = candidata · 2 toques = riscar (eliminei)

Em Python, utilizando a biblioteca Pandas, uma fiscalização estadual cruza um DataFrame de autos de infração (df_autos) com outro de cadastro de contribuintes (df_cad), ambos indexados por CNPJ, e precisa preservar todos os autos mesmo sem cadastro correspondente. Nessa situação, a operação adequada é


3.3 — Dicionário acumulador (Python puro, "sem bibliotecas") ⭐

Às vezes a FCC proíbe Pandas ("sem bibliotecas externas") e quer Python cru. O padrão é o dicionário acumulador: você cria um dict vazio e vai somando dentro dele, por chave, com um if filtrando.

total = {}                              # dicionário acumulador VAZIO
for registro in lista:
    if registro["status"] == "VALIDO":  # FILTRA: só os válidos
        cnpj = registro["cnpj"]
        total[cnpj] = total.get(cnpj, 0) + registro["valor_icms"]   # ACUMULA por CNPJ
🧠 Bizu da banca

Como ler: "para cada registro, se o status for VÁLIDO, soma o valor_icms na chave do CNPJ". O dict cresce conforme aparecem CNPJs novos. É o groupby na unha.


🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863414
1 toque = candidata · 2 toques = riscar (eliminei)

Uma SEFAZ recebe uma lista de dicionários Python com {cnpj, valor_icms, status} e precisa totalizar o ICMS por CNPJ, desconsiderando registros com status != "VALIDO", sem bibliotecas externas. Nesse caso, a abordagem mais adequada é


3.4 — resample, pivot_table e apply (reconhecer o que são)

Você não precisa escrever — precisa reconhecer na alternativa:

🧊 Mais ferramentas Pandas (só reconhecer)

Comando O que faz Quando
resample('M') reamostra série temporal por frequência (só funciona com índice de data) total por mês/semana/ano
pivot_table tabela dinâmica (linhas × colunas × valor agregado) — o "Tabela Dinâmica" do Excel ICMS por município (linha) × mês (coluna)
apply(função) aplica uma função em cada linha/coluna transformar/calcular coluna nova
merge vs concat merge cruza por chave (join) · concat empilha/cola cruzar ≠ empilhar

🪤 Pegadinha: resample precisa de índice datetime — se a data virou string, ele quebra (foi a isca da letra A da questão do Grouper). E pivot_tablemerge: pivot resume uma tabela; merge junta duas.


O PLACAR DOS PROFESSORES — Pandas

Leitura do Camilo: aqui é onde o acervo é mais pobre e a prova foi mais rica — o abismo do tema. O Mathias trata Pandas no guia ("base operacional pra DataFrame/arrays"), mas mesmo ele não previu as de MT antes. A verdade nua: Pandas caiu 5× (+ 1 ETL feita em Pandas) e ninguém destilou. Por isso a estratégia é drill — você resolve as 6 reais (estão todas aqui) até reconhecer o padrão de olho fechado.

Prof Apostou Pandas? Veredito Observação
Felipe Mathias ✅ (no guia) 🎯 base certa única fonte: "este Python é a base pra manipular DataFrame/arrays que a ciência de dados exige"
Lucas Ianni ⚠️ tinha ❌ furou "não destilou o bloco Python/Pandas (Parte 5-6) que caiu pesado" — o maior buraco
Renato (CE) ❌ furou empurrou "pra aula 2" — e a prova cobrou

JÁ CAIU (fato, banco): na SEFAZ-MT 2026 caíram 5 de Python/Pandaspd.Grouper (3863384), merge/join how (3863421), dict acumulador (3863414), gráfico de série temporal (3863424), boxplot de outliers (3863426) — + 1 de ETL feita em Pandas (3863430). Todas confirmadas no banco. 🔮 A APOSTA pro CE (NÃO aconteceu): o edital do CE não nomina Python, então pode não cair. Mas o risco assimétrico manda blindar: se cair, é ponto que o concorrente larga. Estudar é seguro barato; ignorar é apostar contra o que MT já mostrou.


🪤 AS 4 PEGADINHAS DE PANDAS QUE DECIDEM A QUESTÃO

  1. A ORDEM das operaçõesgroupby().resample()resample().groupby(). Fazer uma chave de cada vez troca o resultado. Duas chaves juntas = groupby([c1, c2]) ou pd.Grouper.

  2. how= do joinleft preserva todos da 1ª · inner corta (perde) · outer infla (traz órfão). Ache o "preservar todos de UMA tabela".

  3. "Aproximar / forçar / converter em string" numa alternativa = confissão de erro (gambiarra que não cumpre o requisito exato).

  4. sum(dict) soma as CHAVES · set descarta dado · max ≠ soma — clássicos do "Python puro".


🔗 CONEXÃO — não é ilha, liga com a Aula 04 (pré-processamento) e com SQL (Aula 03)


🧊 GUARDE NO BOLSO (Bloco 3 — o coração)

➡️ Próximo (Bloco 4): a visualização — qual gráfico pra quê. Curto: linha = série temporal, boxplot = outliers. Caiu 2× em MT.


Bloco 4 — VISUALIZAÇÃO (matplotlib / seaborn 🟡)

🎯 O que travar neste bloco (3 gráficos, sem decoreba):


🎬 Caso prático — o relatório de arrecadação do Guilherme

O Guilherme precisa de dois gráficos pro relatório da SEFAZ:

  1. A evolução mensal da arrecadação (jan → dez): é uma linha no tempográfico de linha.

  2. Comparar os valores de autos de infração por tipo de tributo e achar os fora da curva (o auto absurdamente alto): é distribuição + outliersboxplot. Esse boxplot vira anexo do processo que a juíza Bia analisa pra entender por que um auto destoou tanto dos demais.

🧊 QUAL GRÁFICO PRA QUÊ (decore o objetivo → gráfico)

Objetivo Gráfico Sinal no enunciado
evolução no TEMPO linha (line) "evolução mensal", "série temporal", "ao longo do tempo"
achar OUTLIERS / comparar distribuições boxplot "outliers", "assimetria", "quartis", "valores fora da curva"
distribuição/frequência de 1 variável histograma "distribuição de frequências", "faixas"
proporção de um todo pizza / barra "participação", "% do total"

🔑 Os 2 bizus que caíram: série temporal = LINHA (com título e rótulos de eixo via Matplotlib: set_title, set_xlabel, set_ylabel). outlier = BOXPLOT (a "caixa" mostra os quartis; os pontos soltos fora dos "bigodes" são os outliers).


🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863424
1 toque = candidata · 2 toques = riscar (eliminei)

Em Python, utilizando bibliotecas de visualização de dados, uma SEFAZ precisa comunicar a evolução mensal de arrecadação (índice temporal) em relatório institucional, com título e rótulos explícitos de eixos. Nesse caso, o tipo de gráfico e a prática que atendem corretamente ao requisito apresentado é usar


🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863426
1 toque = candidata · 2 toques = riscar (eliminei)

Em Python, utilizando bibliotecas de visualização de dados, um setor de fiscalização compara valores de autos de infração por tipo de tributo para identificar assimetria e possíveis outliers de forma padronizada. Nesse caso, a técnica de visualização que atende corretamente ao requisito apresentado é:


O PLACAR DOS PROFESSORES — Visualização

Leitura do Camilo: visualização é reconhecimento puro — qual gráfico serve pra qual objetivo. Caiu 2× em MT (linha e boxplot) e, de novo, órfão nos cursinhos. Mas é o mais fácil do bloco: você decora 3 pares (tempo→linha, outlier→boxplot, distribuição→histograma) e resolve. 🟡 blindagem média — 10 min, alto retorno se cair.

🪤 Pegadinha de visualização: a FCC adora oferecer o gráfico quase certo com o motivo errado ("barras de médias detectam outliers" — não detectam) ou trocar distribuição (boxplot/histograma) por tendência (linha). Ancore no objetivo do enunciado, não no gráfico bonito.

🧊 GUARDE NO BOLSO (Bloco 4): tempo → LINHA · outlier → BOXPLOT · distribuição → HISTOGRAMA. Título/eixos no Matplotlib = set_title/set_xlabel/set_ylabel. Média NÃO acha outlier.

➡️ Próximo (Bloco 5): o método de ler código na prova + o drill final das 6 questões reais de MT (5 Pandas + 1 ETL em Pandas) e uma de GO de bônus, com a honestidade na mesa.


Bloco 5 — LER CÓDIGO NA PROVA (o método) + ETL em Pandas

🎯 O que travar neste bloco:


🧠 O MÉTODO — como o Camilo lê um código na prova (5 passos)

  1. Lê o REQUISITO primeiro (a frase "preciso de X sem perder Y"). Sublinha os verbos (totalizar, preservar, agrupar, comparar).

  2. Traduz cada alternativa pra português — não "executa" mentalmente, só diz o que a operação FAZ ("isso é um inner join", "isso soma tudo sem filtrar").

  3. Caça o erro plantado — cada distrator tem um: ordem trocada, operação errada, "aproximar/forçar", filtro ausente, ferramenta errada.

  4. Bate com os verbos — a certa cumpre TODOS os verbos do requisito; a errada falha em pelo menos um.

  5. Marca e segue — não fica refinando. Achou a com um erro? Risca. Sobrou uma limpa? É ela.

🔑 O bizu do Pacheco (resolução SP), válido pra Python: "esse tipo de questão não é pra você sair julgando tudo: achou o que não tem a ver, risca e vai embora." Eliminação > certeza.


🎯 Pandas no ETL — o "transformar" em código (conecta Aula 02)

A Aula 02 te deu o ETL (Extract → Transform → Load). Pois o T (transformar) — padronizar datas, normalizar códigos, agregar valores — é feito em Pandas. A FCC cobrou isso direto:

🎯 Questão — teste agora
FCC — SEFAZ-MT 2026 · tec 3863430
1 toque = candidata · 2 toques = riscar (eliminei)

Considerando um pipeline diário que consolida arquivos CSV/JSON de sistemas legados para relatórios de arrecadação e que utiliza Pandas para padronizar datas, normalizar códigos e agregar valores, a etapa que caracteriza corretamente a transformação no processo ETL é


🔮 BÔNUS — quando a FCC sobe o nível: bibliotecas de ML (GO 2026)

⚠️ Honestidade: esta é mais Machine Learning (Aula 04) do que Pandas, mas mostra que a FCC escala o Python pra bibliotecas avançadas. Caiu em GO (o espelho do CE). Não é alvo — é um aviso de teto.

🎯 Questão — teste agora
FCC — AFRE GO/SEFAZ-GO 2026 · tec 3975956
1 toque = candidata · 2 toques = riscar (eliminei)

Considerando uma equipe de ciência de dados da Secretaria da Economia Estadual que prototipa redes neurais em Python e precisa depurar o fluxo de gradientes durante experimentos com dados fiscais, ajustando dinamicamente o caminho computacional conforme condições em tempo de execução, a característica do PyTorch que atende diretamente ao cenário descrito é


🧊 GUARDE NO BOLSO (Bloco 5)


🎓 FECHO + PLANO DE ATAQUE

Para tudo e respira, Felício. 🫁 Você acabou de fazer o que quase nenhum concorrente vai fazer: olhou Python na cara e aprendeu a ler código. Não virou programador — virou leitor de Pandas, que é tudo que a FCC pede. Guarda o essencial e leva o plano.


📦 O QUE LEVAR NO BOLSO (a aula numa olhada)

Os 4 bizus que decidem as questões de Pandas:

Tema 🔑 Bizu colável Caso fiscal
groupby + Grouper duas chaves juntas = groupby([municipio, pd.Grouper(freq='M')]) total mensal por município
merge/join how left preserva a 1ª · inner corta · outer infla preservar TODOS os autos = LEFT
dict acumulador if filtra + soma na chave (groupby na unha) totalizar ICMS por CNPJ só VÁLIDO
visualização tempo→LINHA · outlier→BOXPLOT · distribuição→HISTOGRAMA relatório de arrecadação

E as pegadinhas universais (do guia do Mathias):


🎯 PLANO DE ATAQUE 80/20 (a ORDEM, por ROI)

⚖️ Lembre da honestidade: o edital do CE não nomina Python — isto é hedge. Então estude DEPOIS do ouro (SQL, ML, arquitetura), e estude enxuto:

1️⃣ DRILL das 6 questões de MT (~40 min) — o ROI máximo do tema.

2️⃣ Decora os 4 bizus (~15 min) — a tabela acima.

3️⃣ Blindagem de sintaxe/NumPy (~10 min) — só pra não travar na leitura.

🧭 Bordão do plano: Python é seguro de 1h — não é a vaga, é a apólice. Mas é a apólice que o concorrente esqueceu de pagar.


O LEMBRETE FINAL (honestidade na mesa)

Honestidade temporal: o CE ainda NÃO aconteceu (prova 01-02/08/2026). Tudo de Python é aposta 🔮 calibrada pelo que JÁ CAIU ✅ em MT (5q Python/Pandas + 1 ETL em Pandas) e GO (1q de PyTorch).

Tema Caiu (fato) Pro CE
Pandas (groupby/Grouper/merge/dict) ✅ MT 5q + 1 ETL (banco) 🔮 hedge ALTO (se cair, ponto órfão)
Visualização (linha/boxplot) ✅ MT 2q (banco) 🔮 hedge médio
PyTorch / ML lib ✅ GO 1q (banco) 🔮 borda — só com base de ML
NumPy / sintaxe ❌ não isolado (fiscal) 🟢 pré-requisito

O professor de TI aqui é o Camilo. O Mathias deu a base (o único que deu), mas ninguém previu as de MT. A palavra final é nossa: Python é o ponto que o edital não promete, mas que MT entregou — e que TODO concorrente larga. Você não decora cursinho; você lê o código e deduz o que faz. Onde todos estão cegos, quem enxerga um pouco já passa na frente.

🔑 Bordão-mestre da Aula 07: na FCC, Python não se escreve — se LÊ. Traduz pra português, caça o erro plantado, marca o que cumpre o requisito. ⚡


🧭 PRÓXIMA PARADA — o ouro de verdade. Você fechou a apólice de seguro (Python). Agora volta pro cofre: Aula 02 (Arquitetura: Data Lake × Warehouse × Lakehouse, ETL×ELT), Aula 03 (SQL na mão) e Aula 04 (Machine Learning — o OURO MÁXIMO, 7 de 11 em SP). Lembra: o groupby que você leu aqui é o GROUP BY que você vai escrever em SQL. Te espero lá. 🪜


🎯 HORA DE RESOLVER — Drill da Aula 07

🔵 Bate o olho e resolve lendo cada alternativa traduzida pra português · 🔴 Corrige com calma as que travar. Todas FCC 2026, conferidas no banco. As 6 primeiras são o alvo (Pandas de MT — o que crava); a última (PyTorch/GO) é teto de dificuldade, só pra sentir até onde a banca pode subir.

🎯 Questões pra resolver

👆 Marque a sua (1 toque) · risque as eliminadas (2 toques) · Conferir mostra o gabarito. A resolução comentada abre no TEC.
Questão 1 (FCC · SEFAZ-MT · 2026 · tec 3863384)
Em Python, utilizando a biblioteca Pandas, considere um DataFrame com arrecadação diária de ICMS, coluna municipio e índice datetime, e a necessidade de obter o total mensal por município sem perder granularidade temporal correta. Nesse caso, a operação que atende corretamente ao requisito apresentado é
Questão 2 (FCC · SEFAZ-MT · 2026 · tec 3863421)
Em Python, utilizando a biblioteca Pandas, uma fiscalização estadual cruza um DataFrame de autos de infração (df_autos) com outro de cadastro de contribuintes (df_cad), ambos indexados por CNPJ, e precisa preservar todos os autos mesmo sem cadastro correspondente. Nessa situação, a operação adequada é
Questão 3 (FCC · SEFAZ-MT · 2026 · tec 3863414)
Uma SEFAZ recebe uma lista de dicionários Python com {cnpj, valor_icms, status} e precisa totalizar o ICMS por CNPJ, desconsiderando registros com status != "VALIDO", sem bibliotecas externas. Nesse caso, a abordagem mais adequada é
Questão 4 (FCC · SEFAZ-MT · 2026 · tec 3863430)
Considerando um pipeline diário que consolida arquivos CSV/JSON de sistemas legados para relatórios de arrecadação e que utiliza Pandas para padronizar datas, normalizar códigos e agregar valores, a etapa que caracteriza corretamente a transformação no processo ETL é
Questão 5 (FCC · SEFAZ-MT · 2026 · tec 3863424)
Em Python, utilizando bibliotecas de visualização de dados, uma SEFAZ precisa comunicar a evolução mensal de arrecadação (índice temporal) em relatório institucional, com título e rótulos explícitos de eixos. Nesse caso, o tipo de gráfico e a prática que atendem corretamente ao requisito apresentado é usar
Questão 6 (FCC · SEFAZ-MT · 2026 · tec 3863426)
Em Python, utilizando bibliotecas de visualização de dados, um setor de fiscalização compara valores de autos de infração por tipo de tributo para identificar assimetria e possíveis outliers de forma padronizada. Nesse caso, a técnica de visualização que atende corretamente ao requisito apresentado é:
Questão 7 (FCC · AFRE GO/SEFAZ GO · 2026 · tec 3975956)
Considerando uma equipe de ciência de dados da Secretaria da Economia Estadual que prototipa redes neurais em Python e precisa depurar o fluxo de gradientes
durante experimentos com dados fiscais, ajustando dinamicamente o caminho computacional conforme condições em tempo de execução, a característica do PyTorch que
atende diretamente ao cenário descrito é

Última atualização: 22/06/2026 22:12 — Camilo

Camilo · Projeto Auditor · modo interativo