Vídeo em breve
Por enquanto, esta aula está disponível só em texto — o vídeo entra assim que ficar pronto.
Fundamentos
Pandas: carregando e explorando dados
DataFrames, leitura de CSV, seleção e filtros, colunas novas, agrupamentos e tratamento de valores ausentes. · 18 min
Dados reais raramente chegam como arrays perfeitos: vêm em planilhas e arquivos CSV, com colunas de texto, datas e buracos. O Pandas é a biblioteca para carregar, explorar e limpar esse tipo de dado. A estrutura principal dele é o DataFrame, uma tabela com linhas e colunas nomeadas.
import pandas as pd
Criando e lendo um DataFrame
dados = {
"nome": ["Ana", "Bruno", "Carla", "Diego"],
"curso": ["Mecatrônica", "Mecatrônica", "Computação", "Computação"],
"idade": [22, 25, 31, 28],
"nota": [8.5, 6.0, 9.2, 7.4],
}
df = pd.DataFrame(dados)
print(df)
Na prática você quase sempre carrega de um arquivo:
df = pd.read_csv("alunos.csv")
Primeiro contato com os dados
Ao receber uma tabela nova, estes comandos são o seu primeiro reflexo:
print(df.head()) # as primeiras 5 linhas
print(df.shape) # (linhas, colunas)
print(df.columns) # nomes das colunas
df.info() # tipos de cada coluna e quantos valores não nulos
print(df.describe()) # média, desvio, mínimo e máximo das colunas numéricas
Selecionando colunas e linhas
print(df["nota"]) # uma coluna (uma Series)
print(df[["nome", "nota"]]) # várias colunas (um DataFrame)
print(df.loc[0, "nome"]) # linha de índice 0, coluna "nome"
print(df.iloc[0:2]) # as duas primeiras linhas, por posição
Filtrando linhas
Funciona como as máscaras booleanas do NumPy:
aprovados = df[df["nota"] >= 7]
mecatronica = df[df["curso"] == "Mecatrônica"]
# várias condições: use & (e), | (ou), e parênteses em cada uma
filtro = df[(df["nota"] >= 7) & (df["idade"] < 30)]
Atenção
Ao combinar condições no Pandas, use & e |, e não and e or, e
coloque cada condição entre parênteses. Usar and gera um erro de
“valor de verdade ambíguo”.
Criando colunas e ordenando
df["aprovado"] = df["nota"] >= 7
df["idade_em_meses"] = df["idade"] * 12
print(df.sort_values("nota", ascending=False))
Agrupando com groupby
Uma das operações mais úteis: calcular algo por grupo.
print(df.groupby("curso")["nota"].mean())
# curso
# Computação 8.30
# Mecatrônica 7.25
print(df.groupby("curso")["aprovado"].sum()) # aprovados por curso
Valores ausentes
Dados reais têm buracos, que o Pandas representa como NaN:
print(df.isna().sum()) # quantos ausentes por coluna
df["nota"] = df["nota"].fillna(df["nota"].mean()) # preenche com a média
df = df.dropna() # ou remove linhas com ausentes
Dica
Preencher ou remover? Se poucas linhas têm buracos, remover costuma ser seguro. Se muitas têm, preencher (com média, mediana ou um valor fixo) evita jogar dados fora. Não existe regra única: depende do problema.
Exercícios
Exercício
1. Aquecimento. Crie um DataFrame com 5 produtos, com colunas
produto, preco e estoque. Imprima o head(), o shape e o
describe().
Exercício
2. Filtrando e ordenando. No DataFrame dos produtos, mostre só os que têm estoque maior que zero e preço abaixo da média, ordenados do mais barato para o mais caro.
Exercício
3. Desafio. Use o DataFrame de alunos desta aula, adicione mais 4
alunos e insira alguns valores None na coluna nota. Preencha os
ausentes com a média do curso de cada aluno (dica: groupby junto de
transform("mean")) e depois imprima quantos alunos foram aprovados em
cada curso.