Cargando tu progreso…

Pokédex Codex

pandas: Selección y filtrado

META

🎯 Meta: elegir exactamente las filas y columnas que te interesan. Filtrar es el 80% del trabajo de un analista.

Ya tenés tu Pokédex como DataFrame. Ahora vas a hacerle preguntas: ¿quiénes superan el nivel 50? ¿cuáles son de tipo Fuego? ¿quién es el más fuerte?

🎯 Elegir filas por posición: iloc

.iloc usa posiciones (como los índices de una lista: 0, 1, 2…).

import pandas as pd
pokedex = pd.DataFrame({
    "nombre": ["Pikachu", "Charizard", "Bulbasaur"],
    "nivel":  [25, 90, 12],
})
print(pokedex.iloc[0])     # primera fila
print(pokedex.iloc[1]["nombre"])   # nombre de la 2da fila -> Charizard

🎭 Filtrar con condiciones (boolean indexing)

Lo más poderoso: le pasás una condición entre corchetes y te quedan solo las filas que cumplen.

import pandas as pd
pokedex = pd.DataFrame({
    "nombre": ["Pikachu", "Charizard", "Bulbasaur", "Snorlax"],
    "nivel":  [25, 90, 12, 70],
    "tipo":   ["Eléctrico", "Fuego", "Planta", "Normal"],
})
print(pokedex[pokedex["nivel"] >= 50])          # los de nivel 50+
print(pokedex[pokedex["tipo"] == "Fuego"])      # los de tipo Fuego
TIP

💡 pokedex["nivel"] >= 50 da una Series de True/False (una máscara, como en NumPy). pandas usa esa máscara para filtrar filas.

P: ¿Qué hace `pokedex[pokedex["nivel"] >= 50]`?
- Devuelve la fila en la posición 50.
- Devuelve el valor `50` de la columna nivel.
+ Devuelve todas las filas donde el nivel es 50 o más.
> `pokedex["nivel"] >= 50` crea una máscara True/False. Pasarla entre corchetes filtra y mantiene solo las filas donde es `True`.

🔗 Varias condiciones a la vez

Combinás con & (y) / | (o). Ojo: cada condición va entre paréntesis.

import pandas as pd
pokedex = pd.DataFrame({
    "nombre": ["Pikachu", "Charizard", "Snorlax"],
    "nivel":  [25, 90, 70],
    "tipo":   ["Eléctrico", "Fuego", "Normal"],
})
fuertes_no_fuego = pokedex[(pokedex["nivel"] > 30) & (pokedex["tipo"] != "Fuego")]
print(fuertes_no_fuego)
P: Para combinar dos condiciones en un filtro pandas (nivel > 30 **y** tipo Fuego), ¿cuál es la sintaxis correcta?
- `pokedex[pokedex["nivel"] > 30 and pokedex["tipo"] == "Fuego"]`
+ `pokedex[(pokedex["nivel"] > 30) & (pokedex["tipo"] == "Fuego")]`
- `pokedex[pokedex["nivel"] > 30 & pokedex["tipo"] == "Fuego"]`
> Con pandas se usa `&` (no `and`) y cada condición va entre paréntesis. Sin los paréntesis el orden de operaciones rompe el filtro.

↕️ Ordenar

import pandas as pd
pokedex = pd.DataFrame({"nombre": ["Pikachu", "Charizard", "Bulbasaur"], "nivel": [25, 90, 12]})
print(pokedex.sort_values("nivel", ascending=False))   # del más fuerte al más débil

🏆 El más fuerte: idxmax

import pandas as pd
pokedex = pd.DataFrame({"nombre": ["Pikachu", "Charizard", "Bulbasaur"], "nivel": [25, 90, 12]})
pos = pokedex["nivel"].idxmax()                  # posición del nivel máximo
print("El más fuerte es:", pokedex.loc[pos, "nombre"])   # -> Charizard

📝 Resumen

CosaPara qué
df.iloc[i]fila por posición
df[df["col"] > x]filtrar filas por condición
(c1) & (c2), (c1) | (c2)combinar condiciones
df.sort_values("col", ascending=False)ordenar
df["col"].idxmax()posición del valor máximo
df.loc[pos, "col"]un valor por etiqueta de fila/columna

➡️ ¿Y ahora qué?

Practicá con los ejercicios de este tema. 💪

ÁNIMO

“Saber preguntar es más valioso que saber todas las respuestas.”