0% acharam este documento útil (0 voto)
14 visualizações18 páginas

Python ETL

Eyl

Enviado por

mika santana
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
14 visualizações18 páginas

Python ETL

Eyl

Enviado por

mika santana
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

🐍Python ETL

Manipulando dados com pandas 🐼


Temas Do Excel ao Python: domine a transformação de dados com
pandas passo a passo.
# Conceituação
de ETL
🏃 Entenda o que é ETL e por que ele é essencial para
pipelines de dados.

# Introdução
ao pandas
🐼 Manipulando tabelas como no Excel — mas com o
poder do Python.

# Extração e leitura de arquivos 📂 Leitura de CSV, Excel e Google Sheet


# Avaliação
sumária
🔍 Faça um check-up rápido do seu DataFrame para
conhecer sua estrutura, tipos, nulos e padrões.

# Tratamento ao nível de coluna


✏️ Ajustes essenciais nas colunas para deixar os dados
prontos para análise.

# Substituição de linhas
🔄 Várias formas de transformar valores de forma
condicional.

# Imputação de
linhas
🩹 Preenchimento de valores ausentes (NaN) para manter
a consistência e a utilidade dos dados.

# Filtragem de
linhas
🎯 Técnicas para selecionar subconjuntos de dados com
base em condições.

# Deduplicação de linhas
🧹 Como identificar e remover registros duplicados em
DataFrames de forma segura e eficiente

# Ordenação de
linhas
📊 Reorganizar as linhas de um DataFrame com base em
uma ou mais colunas.

# Enriquecimento ao nível de coluna 🧠 Feature engeniier com colunas personalizadas


# Enriquecimento ao nível de tabelas
com Join
🔗 Una tabelas com merge() e join(), usando diferentes
tipos de junção (inner, left, right, outer).

# Enriquecimento ao nível de tabelas


com groupby
🧮 Análise por Grupos com Pandas – Enriquecendo Tabelas
com GroupBy

# Enriquecimento ao nível de tabelas


com multi-index
🧷 Transformando dados com organização em camadas
(mesclagens)

# Enriquecimento ao nível de tabelas


com stack, unstack e melt
🔄 Transformando a forma dos dados: de largo para longo
e vice-versa com apenas um comando

# Enriquecimento ao nível de tabelas


com tabelas dinâmicas
🔁 Use pivot_table() para gerar resumos dinâmicos com
agregações por linha e coluna.

# Exportação 💾 Salve seus resultados


🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo
🐍Python ETL
Manipulando dados com pandas 🐼
Conceituação e Entenda o papel da análise exploratória de dados e como aplicá-
Aplicação EDA la em projetos reais.

# O que é?
🧠 ETL é uma sigla para "Extract, Transform, Load", ou Extração,
Transformação e Carga de dados. É um processo fundamental para
quem trabalha com dados.

📥 Extração (Extract):
Coleta de dados de uma ou mais fontes: planilhas, bancos de dados, APIs,
arquivos CSV, web scraping etc. É o momento de buscar o dado bruto, onde quer
que ele esteja.

🧪 Transformação (Transform):
Ajustes necessários para tornar os dados utilizáveis. Aqui está o coração do
processo, onde os dados ganham estrutura e sentido.
# Etapas do ETL Limpeza (tratamento de nulos, erros, duplicações)
Conversão de tipos de dados
Padronização de formatos (datas, números, categorias)
Criação de colunas derivadas (feature engineering)
Junções entre tabelas

📤 Carga (Load):
Envio dos dados tratados para seu destino final:

Garante qualidade e consistência nos dados.


Facilita a reprodutibilidade e automação do fluxo de trabalho.
# Por que o ETL é tão Permite que você confie nos dados para gerar dashboards, análises e
importante? modelos.
É a base para pipelines automatizados, data warehouses e projetos de
machine learning.

Introdução Manipulando tabelas como no Excel — mas com o poder do


ao pandas Python.

# Principais - Series: uma única coluna com índice


estruturas - DataFrame: uma tabela completa — como uma planilha do Excel

# Criando um import pandas as pd


DataFrame df = [Link]({'nome': ['Ana', 'João'], 'idade': [25, 30]})

# Por que usar Automatizar análises


pandas? Repetir facilmente analises com um só clique

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Extração e leitura de Importando dados de diversas fontes para iniciar a análise
arquivos exploratória.

📥 Leitura padrão de bases tabulares salvas em .csv.


df = pd.read_csv("[Link]")

Usar separador:
df = pd.read_csv("[Link]", sep=";")
# Importar arquivos
CSV
🌐 Usar codificação:
df = pd.read_csv("[Link]", encoding="utf-8")

🔢 Usar números com vírgula decima:


df = pd.read_csv("[Link]", decimal=",")

# Importar arquivos
Excel
📊 Ideal para arquivos do Excel com múltiplas abas.
df = pd.read_excel("[Link]")

# Outros tipos de
🧾
🧩 pd.read_json()

arquivos
🧱 pd.read_html()
pd.read_parquet()

import gspread
from [Link] import auth
from [Link] import default
auth.authenticate_user()
creds, _ = default()

def aquisicao_google_sheets(sheet_id, sheet_name):


# Leitura de arquivos
SHEET_ID = sheet_id
de Google Planilha
SHEET_NAME = sheet_name
gc = [Link](creds)
spreadsheet = gc.open_by_key(SHEET_ID)
worksheet = [Link](SHEET_NAME)
rows = worksheet.get_all_records()
df = [Link](rows)
return df

🏢 Banco de dados:

# Leitura de bancos pip install pandas_gbq


de dados como from pandas_gbq import read_gbq
BigQuery
query = "SELECT * FROM `meu_projeto.minha_base.minha_tabela` LIMIT 1000"
df = read_gbq(query, project_id="meu_projeto")

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼

Avaliação Faça um check-up rápido do seu DataFrame para conhecer sua


sumária estrutura, tipos, nulos e padrões.

# Tamanho do
dataframe
📏 Retorna o tamanho do DataFrame, com linhas e colunas
[Link]

# Informação geral
das colunas
📋 Retorna estrutura e tipos, com tipos das colunas, nulos e memória
[Link]()

# Nulidades das
colunas
❓ Retorna nulos por coluna, contando número de nulos
[Link]().sum()

# Tipologia das

etc.
Tipo de dados por coluna, verificando cada coluna se é int, float, object, bool

colunas
[Link]

# Estatísticas de Estatísticas para variáveis numéricas (média, desvio padrão, min, max)
colunas numéricas [Link](include=[float, int])

Estatísticas para variáveis categóricas (contagem, únicos valores, valor mais


# Estatísticas de
frequente)
colunas categóricas
[Link](include=[object])

Lista os valores únicos de uma coluna


df['coluna'].unique()

Frequência absoluta (ignora nulos)


df['coluna'].value_counts()
# Compreensão de
variáveis categóricas
Frequência incluindo nulos
df['coluna'].value_counts(dropna=False)

Frequência relativa incluindo nulos


df['coluna'].value_counts(dropna=False, normalize=True)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Tratamento ao nível Ajustes essenciais nas colunas para deixar os dados prontos
de coluna para análise.

# Acessar nomes de
coluna
💡 Lista os nomes das colunas
[Link]

# Renomear colunas
✏️ Retorna estrutura e tipos, com tipos das colunas, nulos e memória
[Link]()

# Alterar tipos de
colunas
🔄 Converte tipologia da coluna. Use 'str', 'float', etc
df['coluna'] = df['coluna'].astype('int')

📅 Converte tipologia da coluna para data.


df['data'] = pd.to_datetime(df['data'])

📅
# Conversão para Outros parâmetros interessantes:
Data
⚠️
- format=None # Formato esperado da data (ex: "%d/%m/%Y")
- errors='raise' # O que fazer se tiver erro: raise (dá erro), coerce (vira NaT),

🤔
ignore (ignora)
- infer_datetime_format=False # Tenta adivinhar o formato? (pode acelerar)

# Mudar ordem das


colunas
🔄 Reorganize de forma manual. Útil para priorizar variáveis no início da tabela:
df = df[['coluna1', 'coluna3', 'coluna2']]

# Descartando
colunas
🗑️ Remova pelo nome. Ideal para colunas repetidas ou irrelevantes
df = [Link](columns=['coluna'])
desnecessárias
❌ A função dropna() do pandas remove linhas ou colunas com valores nulos
(NaN).

# Descartando [Link]() # Remove linhas com qualquer valor nulo.


colunas com nulidade [Link](axis=1) # Remove colunas com qualquer valor nulo
[Link](how='all') # Remove apenas se toda a linha estiver nula
[Link](thresh=2) # Mantém linhas com pelo menos 2 valores preenchidos
[Link](subset=['email']) # Remove linhas com nulo na coluna 'email'

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Substituição
Várias formas de transformar valores de forma condicional.
de linhas

🔄 Replace substitui diretamente por valor:


Útil para trocas simples, diretas e seguras (mantém valores não mapeados).
# Replace
df['sexo'].replace({"F": "Feminino", "M": "Masculino"})

🧭 Map usa um dicionário de mapeamento:


Mais compacto, mas cuidado: se o valor não estiver no dicionário, vira NaN.
# Map mapa_sexo = {"F": "Feminino","M": "Masculino"}

df['sexo'].map(mapa_sexo)

⚖️ Where para condições simples (tipo if-else):


Ideal para lógicas binárias simples.
# Where
import numpy as np
df['faixa'] = [Link](df['idade'] >= 60, 'Idoso', 'Não idoso')

🎯 Select aplica várias condições com múltiplos retornos:


Muito útil para atribuições baseadas em múltiplas faixas ou categorias.

# Select import numpy as np


condicoes = [df['idade'] < 18, df['idade'] >= 60]
valores = ['Menor de idade', 'Idoso']
df['faixa_etaria'] = [Link](condicoes, valores, default='Adulto')

🧪 Apply para função personalizada para máximo cntrole:


Flexível para aplicar lógicas mais complexas, mas pode ser mais lento.

# Apply def padronizar(valor):


return "Outro" if valor not in ["Feminino", "Masculino"] else valor

df['sexo'] = df['sexo'].apply(padronizar)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Imputação Preenchimento de valores ausentes (NaN) para manter a
de linhas consistência e a utilidade dos dados.

# Preenchimento
📝 Preencher com valor fixo (texto padrão):
Útil para colunas categóricas com valor padrão conhecido.
com valor fixo
df['sexo'] = df['sexo'].fillna("Não informado")

# Preenchimento
📊 Preencher com moda (valor mais frequente):
Evita distorções em colunas com alta frequência de uma categoria.
com moda
df['sexo'] = df['sexo'].fillna(df['sexo'].mode())

# Preenchimento
➗ Preencher com média:
Preferível para variáveis numéricas
com média
df['idade'] = df['idade'].fillna(df['idade'].mean())

# Preenchimento
🧮 Preencher com mediana:
Preferível para variáveis numéricas. Use mediana se houver outliers.
com mediana
df['idade'] = df['idade'].fillna(df['idade'].median())

# Preenchimento
🧠 Preencher com [Link]() (condicional):
Quando quiser um controle condicional simples.
com condicional
import numpy as np
simples
df['sexo'] = [Link](df['sexo'].isna(), "Não informado", df['sexo'])

# Preenchimento
🔙 Preencher com valores da linha anterior:
Muito usado em dados temporais (como séries de tempo ou históricos).
com linha anterior
df['valor'] = df['valor'].fillna(method='bfill')

# Preenchimento
🔜 Preencher com valores da linha posterior:
Muito usado em dados temporais (como séries de tempo ou históricos).
com linha posterior
df['valor'] = df['valor'].fillna(method='ffill')

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Filtragem Técnicas para selecionar subconjuntos de dados com base em
de linhas condições.

# Filtragem simples
com condição
🟢 Selecionar linhas que atendem a uma condição:
df[df['idade'] > 60]

# Filtragem com
múltiplas condições
🟢 Selecionar usando & (E) ou | (OU), com parênteses:
df[(df['idade'] > 60) & (df['sexo'] == 'Feminino')]

# Filtragem por lista


de valores
🟢 Selecionar linhas cujo valor esteja em uma lista:
df[df['cidade'].isin(['São Paulo', 'Belo Horizonte'])]

# Filtragem excluindo
valores com negação
🔴 Selecionar quem NÃO está em uma lista
df[~df['sexo'].isin(['Feminino', 'Masculino'])]

⚪ Remover linhas com qualquer valor ausente


[Link]()
# Filtragem
removendo valores
nulos
⚪ Remover apenas se a coluna 'idade' estiver nula
[Link](subset=['idade'])
df_receitas[df_receitas["cliente_sexo"].notna()]

# Filtragem por
texto contido
🟣 Filtrar strings que contêm um padrão.
df[df['nome'].[Link]("Maria", case=False, na=False)]

🟡 Filtrar por intervalo de datas.


df[(df['data'] >= '2024-01-01') & (df['data'] <= '2024-12-31')]

📅 Comparação direta com o dia atual:


df[df['data'].[Link] == [Link]().date()]

# Filtragem por
datas
⏰ Filtrar datas anteriores a hoje:
df[df['data'] < [Link]()]

🗓️ Filtrar dados do mês atual:


df[df['data'].[Link] == [Link]().month]

🗓️ Filtrar dados do ano atual:


df[df['data'].[Link] == [Link]().year]

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Deduplicação
Como identificar e remover registros duplicados em DataFrames
de linhas
de forma segura e eficiente

# Verificação de
✅ Conta quantas linhas duplicadas existem:
Compara todas as colunas por padrão.
duplicatas
[Link]().sum()
[Link](subset=['coluna_alvo']).sum()

# Visualizar linhas
duplicadas
🔍 Mostra as linhas duplicadas no DataFrame:
df[[Link]()]

# Manter primeira
🥇 Remove duplicatas mantendo a primeira ocorrência.
df = df.drop_duplicates()
ocorrência
df = df.drop_duplicates(keep='first')

# Manter a última
ocorrência
🥈 Remove duplicatas mantendo a última ocorrência.
df = df.drop_duplicates(keep='last')

# Remover
duplicadas com base
em uma ou mais
🧹 Considera apenas colunas selecionadas na checagem.
df = df.drop_duplicates(subset=['coluna1', 'coluna2'])
coluna

# Manter a ocorrência
por chave primária
🔐 Remove duplicatas mantendo o mais recente por chave.
df = df.drop_duplicates(subset=['id'], keep='last')

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼

Ordenação
Reorganizar as linhas de um DataFrame com base em uma ou
de linhas
mais colunas.

# Ordenação
✅ Organiza da menor para a maior:
Ascending=True é o valor padrão.
crescente df_ordenado = df.sort_values(by='data_lancamento')
df_ordenado = df.sort_values(by='data_lancamento', ascending=True)

# Ordenação
decrescente
🔻 Traz os maiores valores primeiro:
Útil para ranqueamento, top N, alertas etc.
df_ordenado = df.sort_values(by='venda_valor', ascending=False)

# Ordenação por
📊 Primeira prioridade e segunda prioridade:
O que vem primeiro é prioritário
múltiplas colunas
df_ordenado = df.sort_values(by=['data_lancamento', 'venda_valor'])

# Ordenação por
prioridade
🚻 Primeira prioridade e segunda prioridade, com parâmetro de direção:
df = df.sort_values(by=['cliente_sexo', 'venda_valor'], ascending=[True, False])

# Ordenação e reset
🔄 Garante que os índices reflitam a nova ordem:
drop=True evita que o índice antigo vire uma coluna.
do index
df = df.sort_values(by='venda_valor', ascending=False).reset_index(drop=True)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Enriquecimento de
Feature engeniier com colunas personalizadas
colunas

Feature Engineering é o processo de: Criar, Transformar, ou Selecionar


atributos (variáveis/colunas) que ajudam a extrair padrões mais

# O que é feature
engineering?
➡️
significativos dos dados.

📅 A variável original cliente_nascimento_data não era útil diretamente.


Ao transformá-la em cliente_idade, ela passou a carregar mais informação

📊
analítica.
Depois, ao agrupar em faixas etárias (cliente_faixa_etaria), tornou-se ainda mais
interpretável e aplicável.

🧠 Baseadas em Conhecimento de Domínio (Domain Knowledge):


Transformações que dependem de entendimento contextual do fenômeno
observado.

# Engenharia de Conversão de datas: Transformar datas em atributos úteis para análise. Exemplo:
features baseadas em idade, tempo desde último evento, tempo de uso
conhecimento de
domínio Indicadores binários: Transformar categorias em presença/ausência. Exemplo:
presença de doença, uso de serviço

Contagens e taxas: Quantificar ocorrências ao longo do tempo. Exemplo: nº de


visitas, frequência mensal, média semanal

⚙️ Baseadas em Processamento Técnico:


Transformações que são técnicas ou automáticas, geralmente independentes de
contexto.

# Engenharia de Faixas de categorização: Agrupar valores contínuos em categorias. Exemplo:


features baseadas em faixas etárias, níveis de renda
processamento
técnico Normalizações: Padronizar escalas para comparabilidade. Exemplo: z-score, min-
max

Extração de componentes: Obter partes de variáveis complexas. Exemplo: dia da


semana, mês, hora de um datetime

# Engenharia de
➕ Categoria Sugerida: Combinação e Interação de Variáveis:
Transformações que cruzam ou combinam variáveis para extrair relações mais
features baseadas em complexas.
processamento
técnico Interações e relações cruzadas: Criar novas variáveis a partir da combinação de
outras. Exemplo: colesterol/HDL, n_comorbidades (contagem de comorbidades)

# Exemplo de df['idade'] = df['nascimento'].apply(lambda x: [Link] - [Link] - (([Link],


aplicação [Link]) < ([Link], [Link])))

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Enriquecimento ao
Una tabelas com merge() e join(), usando diferentes tipos de
nível de tabelas com
junção (inner, left, right, outer).
Join

# O que é um
🔗 É a combinação de duas ou mais tabelas com base em uma ou
mais colunas (chaves), para enriquecer os dados. É fundamental para
join (merge)? análises com múltiplas fontes de informação (ex: pacientes + exames, pacientes +
atendimentos).

Para que o merge funcione corretamente, as colunas utilizadas como chave


devem ter o mesmo tipo de dado nas duas tabelas.

# Função
[Link](tabela_esquerda, tabela_direita,
[Link] ( )
left_on='coluna_chave_1',
right_on='coluna_chave_2',
how='tipo_join')

🔍 Parâmetro how:

'inner': Mantém apenas registros que existem nas duas tabelas (interseção).
Exemplo: Pacientes que fizeram pelo menos um exame

'left': Mantém todos os registros da tabela da esquerda e completa com o que


existir na da direita. Exemplo: Lista de todos os pacientes, com exames se
# Tipos de
existirem
join
'right': Mantém todos da direita, preenchendo com dados da esquerda. Exemplo:
Lista de todos os exames, com nome do paciente se conhecido

'outer': Une tudo (união), preenchendo com NaN quando não existir
correspondência. Exemplo: Visão ampla, mesmo para pacientes ou exames sem
correspondência

# Parâmetro
🏷️ Quando há colunas com o mesmo nome nas duas tabelas (ex: data), usar o
parâmetro suffixes evita sobrescrever dados:
suffixes
[Link](df1, df2, on='id', suffixes=('_cadastro', '_exame'))

🧾 Adiciona uma nova coluna chamada '_merge' que informa a origem de cada
linha no resultado da junção. Útil para criar lógica de exclusão, priorização ou
notificação para casos com left_only ou right_only.

# Parâmetro df_merged = [Link](df_pacientes, df_exames, on='id_paciente', how='outer',


indicator indicator=True)

both → a linha estava nas duas tabelas (ex: paciente com exame)
left_only → só estava na tabela da esquerda (ex: paciente sem exame)
right_only → só estava na tabela da direita (ex: exame sem paciente conhecido)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Enriquecimento ao
Análise por Grupos com Pandas – Enriquecendo Tabelas com
nível de tabelas com
GroupBy
groupby

# O que é um
🎯 A função groupby() do pandas permite agrupar dados com base
em uma ou mais colunas, para então aplicar agregações (como média, soma,
groupby? contagem etc.) ou funções personalizadas. Isso é essencial para análises
descritivas, resumos estatísticos e segmentações.

# Estrutura
💡 Agrupa os dados por uma dimensão (ex: sexo):
[Link](coluna_agrupadora)["coluna_valor"].função()
básica
Exemplo simples: [Link]("Sexo")["Nota"].mean()

# Agrupamento por
múltiplas colunas
💡 Agrupa os dados por mais de uma dimensão (ex: sexo e turma):
[Link](["Sexo", "Turma"])["Nota"].mean()

# Agrupamento por
✅ Aplicação de múltiplas funções em uma mesma coluna:

mais de uma medida [Link]("Sexo")["Nota"].agg(["mean", "min"])


[Link]("Sexo")["Nota"].aggregate(["mean", "min"])

📊 Aplicação de múltiplas funções em uma mesma coluna:


Usa .apply() com uma função definida pelo usuário. Ideal para aplicar regras
próprias.

def classificar_grupo(grupo):
media = grupo["Nota"].mean()
# Agrupamento com if media > 8:
medida personalizada return "Excelente"
elif media >= 6:
return "Regular"
else:
return "Ruim"

[Link]("Sexo").apply(classificar_grupo)

# Definição das colunas para agrupamento


colunas_agregantes = ["cliente_sexo", "profissional_especialidade"]

# Agrupamento por # Dicionário de agregações dinâmico


múltiplas colunas e dicionario_valores_agregados = {
por mais de uma "venda_valor": ["sum", "mean", "max", "min"],
medida, com medidas "pagamento_data": ["min", "max"]
diferentes para cada }
coluna
# Aplicando o agrupamento e agregações
df_agregado =
df_final.groupby(colunas_agregantes).aggregate(dicionario_valores_agregados)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼
Enriquecimento ao
nível de tabelas com Transformando dados com organização em camadas
multi-índices (mesclagens)

🧱 Um MultiIndex (ou índice hierárquico) é uma forma de organizar os


dados em camadas. Em vez de ter apenas um índice (como apenas o
# O que é nome do aluno), podemos definir dois ou mais índices simultâneos (como
multi-index? semestre e aluno), criando uma estrutura mais poderosa para visualização. A ideia
de multi-indíces (ou multi-index) é mais intuitiva quando pensamos em Excel. Sabe
a função "mesclar células"?

# Diferenças com
groupby
🔍 Groupby agrupa e agrega dados (como soma, média). Set_index com múltiplas
colunas apenas organiza os dados hierarquicamente, sem agregação.

# Estrutura
básica
🛠️ df_multi_indices = notas_listas.set_index(['semestre', 'aluno'])

🔧 Ver os valores únicos: Mostra os valores únicos de cada nível do índice


df_multi_indices.[Link]

🔢 Contar níveis: Retorna quantos níveis existem no índice


df_multi_indices.[Link]

# Ações úteis
🔁 Resetar índice: Transforma os índices em colunas novamente
df_multi_indices.reset_index()

🔍 Acessar valores de um nível: Retorna os valores do nível 0 (ou outro índice). 0 é


o nível mais externo (mais alto na hierarquia)
df_multi_indices.index.get_level_values(0)

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Manipulando dados com pandas 🐼

Enriquecimento ao
Transformando a forma dos dados: de largo para longo e vice-versa
nível de tabelas com
com apenas um comando
stack, unstack e melt

📚 Em português, "empilhar", é um método que, basicamente, empilha


os dados do DataFrame em uma ou mais linhas. Ou seja, move colunas
para o índice (linha) → deixa o DataFrame mais longo e estreito. 0 é o nível mais
# O que é stack? externo da multi-índice de colunas (mais alto na hierarquia). Sem parâmetro
assume-se o 0.

df_stacked = [Link]()

🧯 É o método inverso ao `stack`, ou seja, ele pega os índices interiores de linhas e


transforma em índices interiores de colunas. Ou seja, move linhas para colunas →
deixa o DataFrame mais curto e longo. 0 é o nível mais externo do multi-índice de
# O que é unstack?
linhas (mais alto na hierarquia). Sem parâmetro assume-se o 0.

df_unstacked = [Link]()

🔄 Melt() é um método que "desempilha" ou transforma um DataFrame de


formato largo (wide) para formato longo (long). Ele reúne múltiplas colunas em
apenas duas: uma para os nomes das colunas (variáveis) e outra para os valores.
Diferente do unstack, a função melt é útil quando você não tem multi-índice, mas
quer reorganizar os dados para visualizações ou análise.

df_melted = [Link](df,
id_vars=["ID", "Ano"],
# O que é melt? value_vars=["Jan", "Fev", "Mar"],
var_name="Mês",
value_name="Valor")

id_vars: colunas que devem permanecer fixas (ex: ID, Data)


value_vars: colunas que serão convertidas em linhas
var_name: nome da nova coluna com os nomes das colunas
originais
value_name: nome da nova coluna com os valores

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Transformando dados em insights com pandas 🐼
Enriquecimento ao
nível de tabelas com Use pivot_table() para gerar resumos dinâmicos com agregações
tabelas dinâmicas por linha e coluna.

# O que é
🟠 A pivot_table() é um método do pandas usado para resumir e reorganizar
dados em uma nova tabela, semelhante às Tabelas Dinâmicas do Excel. Ela
pivot_table? permite especificar índices (linhas), colunas e valores para agregação. Útil para
análises comparativas e visões cruzadas dos dados.

🛠️ Parâmetros básicos:

df.pivot_table(index='coluna_linha',
columns='coluna_coluna',
values='coluna_valores',
# Estrutura aggfunc='função')
básica
Onde:
- index: Atributo que vai para o eixo das linhas (índice da tabela)
- columns: Atributo que será transformada em colunas
- values: Atributos cujos valores serão agregados
- aggfunc: Função de agregação (ex: 'mean', 'sum', 'count', etc.)

⚙️ Outros parâmetros úteis:

# Outros
- fill_value: valor para preencher células ausentes (ex: 0)
parâmetros
- margins=True: adiciona totais por linha e por coluna ("All")
- dropna=False: mantém combinações com colunas nulas

✅ Vantagens da pivot_table:

- Retorna um DataFrame estruturado em forma de cruzamento (melhor que


# Vantagens do
groupby em visões comparativas)
pivot_table
- Permite fácil visualização de métricas por categorias cruzadas
- Permite aplicar várias funções de agregação de uma só vez
- Suporte nativo a múltiplos níveis (MultiIndex) em linhas e colunas

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python ETL
Transformando dados em insights com pandas 🐼
Exportação 💾 Salve seus resultados
# Exportação para
df.to_csv("meu_arquivo.csv", index=False, sep=";", encoding="utf-8")
CSV

# Exportação para
df.to_excel("meu_arquivo.xlsx", index=False)
Excel

from [Link] import auth


from [Link] import default
import gspread
from gspread_dataframe import set_with_dataframe

def exportar_para_google_sheets(df, sheet_id, nome_aba):

# Autenticar no Google (funciona direto no Colab)


auth.authenticate_user()
# Exportação para creds, _ = default()
Google Sheet
# Autorizar com as credenciais
gc = [Link](creds)

# Abrir a planilha e selecionar a aba


planilha = gc.open_by_key(sheet_id)
aba = [Link](nome_aba)

# Escrever os dados na aba


set_with_dataframe(aba, df)

pip install pandas_gbq


from pandas_gbq import to_gbq
# Exportação para
Banco de Dados to_gbq(df, 'meu_dataset.minha_tabela',
project_id='meu_projeto',
if_exists='replace') # ou 'append'

🌐 Acesse nosso site 📷 Siga no Instagram 💬 Entre no nosso grupo


🐍Python Cheat Sheet
Despertando o Pythonista que existe em você!

A Patients2Python é a Primeira e Única Comunidade dedicada exclusivamente ao


aprendizado e aplicação de Ciência de Dados de Saúde.

🩺 Missão:
Desenvolver líderes capazes de reunir expertise clínica, gestão estratégica e domínio
tecnológico, para que, de fato, estejam aptos para abordar os desafios complexos dos
sistemas de saúde modernos, a ponto de conduzi-los com assertividade rumo ao Objetivo
Quíntuplo de aprimorar resultados clínicos e administrativos, sem que comprometer a
equidade e experiência de pacientes e profissionais ao longo da jornada de cuidado.

Você também pode gostar