🐍 .loc vs .iloc в pandas – почему это важно понимать
Очень частая ситуация: нужно выбрать данные из таблицы.
И тут начинается магия (и ошибки)
Как обычно делают
import pandas as pd
df = pd.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"score": [85, 92, 78]
}, index=[10, 20, 30])
И дальше кто-то пишет:
df.loc[0]
И получает… ошибку
В чём разница?
👉 .loc – работает с метками (labels)
👉 .iloc – работает с позициями (индексами)
Разберём на примере
# доступ по индексу (метке)
df.loc[10]
Вернёт строку с индексом 10.
# доступ по позиции
df.iloc[0]
Вернёт первую строку, независимо от значения индекса.
Где чаще всего ошибаются
Когда индекс не 0,1,2…, а, например:
• ID пользователей
• даты
• кастомные значения
df.loc[0] # ❌ может не существовать
df.iloc[0] # ✔️ первая строка
Ещё один важный момент
Срезы работают по-разному:
df.loc[10:20] # включает 20
df.iloc[0:2] # НЕ включает 2
Это тоже часто ломает логику.
Как запомнить
• .loc → логика данных (label)
• .iloc → логика позиции (index)
Когда что использовать?
✔️ .loc:
• работаешь с реальными ID
• фильтруешь по значениям индекса
• пишешь читаемый аналитический код
✔️ .iloc:
• нужен доступ по позиции
• работаешь как с массивом
• делаешь быстрые прототипы
Вывод
Если путаешь .loc и .iloc – рано или поздно словишь очень неприятный баг.
Это не синтаксис — это логика работы с данными.