Se você já ficou na dúvida entre usar loc ou iloc para selecionar dados de um DataFrame do Pandas, saiba que não está sozinho! 🤔 Embora pareçam similares, a diferença fundamental entre indexação por rótulo e por posição inteira pode levar a resultados inesperados ou erros. Neste tutorial, vamos usar um conjunto de dados de desempenho estudantil para desmistificar esses dois métodos essenciais. Confira a fonte original para se aprofundar.

Python code on a screen with pandas library Dev Environment Setup

Conceito Central: Rótulo (loc) vs Posição Inteira (iloc)

O loc seleciona dados com base nos rótulos (nomes) das linhas e colunas. Já o iloc seleciona com base nas posições inteiras (indexação começando em 0). Essa distinção é crucial, viu?

Vamos preparar um DataFrame de exemplo e ver a diferença na prática.

import pandas as pd

# Criando dados de exemplo
data = {
    'student_id': [101, 102, 103, 104, 105],
    'name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Edward'],
    'math': [85, 58, 92, 76, 88],
    'english': [90, 64, 78, 81, 95],
    'science': [92, 70, 85, 79, 91]
}
df = pd.DataFrame(data)

# Definindo 'student_id' como índice
df.set_index('student_id', inplace=True)
print(df)

Agora, vamos selecionar os mesmos dados (o registro do Bob) usando os dois métodos.

# Usando loc: Seleciona pelo rótulo (102)
bob_loc = df.loc[102]
print("Resultado do loc:")
print(bob_loc)
print()

# Usando iloc: Seleciona pela posição (1) - lembra que começa em 0!
bob_iloc = df.iloc[1]
print("Resultado do iloc:")
print(bob_iloc)

Os dois imprimem os dados do Bob, mas a lógica é diferente: o loc encontra a linha com o rótulo 102, enquanto o iloc simplesmente pega a segunda linha (posição 1).

Data analysis visualization chart Algorithm Concept Visual

Padrões de Uso Comuns na Prática

1. Selecionando Múltiplas Linhas/Colunas

Você pode passar uma lista de rótulos ou posições. Olha só:

# loc: Seleciona múltiplos alunos por lista de rótulos
selected_loc = df.loc[[101, 103, 105]]

# iloc: Seleciona múltiplos alunos por lista de posições
selected_iloc = df.iloc[[0, 2, 4]]

2. A Diferença CRÍTICA no Fatiamento (Slicing)

No fatiamento, o loc inclui o rótulo final, enquanto o iloc exclui a posição final (igual ao fatiamento padrão do Python).

# Fatiamento com loc (inclui o rótulo 103)
sliced_loc = df.loc[101:103]

# Fatiamento com iloc (exclui a posição 3)
sliced_iloc = df.iloc[0:3]

Se você não entender isso, pode causar sobreposição ou falhas ao dividir dados em pedaços (chunks).

3. Filtragem Booleana

O loc é a escolha natural para filtrar linhas baseado em condições. É bem mais fácil!

# Estudantes com nota de matemática > 80
high_math = df.loc[df['math'] > 80]

# Estudantes com matemática > 70 E ciências > 80
high_scores = df.loc[(df['math'] > 70) & (df['science'] > 80)]

Fazer isso com iloc requer converter a Series booleana em uma lista, o que é menos intuitivo.

Developer working on a laptop with code editor Coding Session Visual

Conclusão: Quando Usar Cada Um?

  • Use loc quando: Seu DataFrame tem rótulos significativos (ex: IDs, datas) e você quer selecionar/filtrar com base neles. A legibilidade do código é importante, ou você precisa de filtragem booleana.
  • Use iloc quando: Os rótulos estão ausentes ou não têm significado, e você se importa com posições absolutas (ex: primeiras 100 linhas). Quando os rótulos podem ser duplicados ou mudar, e você precisa de um código robusto baseado em posição.

Pense no loc como "chamar pelo nome" e no iloc como "chamar pelo número". 🎯 Escolher a ferramenta certa baseada na estrutura dos seus dados e na sua tarefa vai tornar seus fluxos de trabalho com Pandas muito mais eficientes e livres de erros. Bora testar os exemplos de código para fixar o conceito!