Pular para o conteúdo
</>RoByte

Buscar cursos e aulas

Aulas do curso

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.