Индексаторы .loc и .iloc в pandas: выбор данных

.loc и .iloc — два основных способа выбирать данные в pandas. .loc обращается по меткам (имена индекса и колонок) и понимает булевы условия для фильтрации. .iloc обращается по числовым позициям, как в списках Python. Путаница между ними — источник половины ошибок новичков, поэтому разницу спрашивают почти всегда.

Синтаксис

df.loc[маска, ['колонки']] | df.iloc[номера_строк, номера_столбцов]

Примеры использования

Пример 1: Фильтр по условию + выбор колонок (loc)

df.loc[df['amount'] > 100, ['user_id', 'amount']]

Результат:

   user_id  amount
1        2     300
3        4     250

Пример 2: Первые 2 строки и первые 2 столбца по позиции (iloc)

df.iloc[:2, :2]

Результат:

   user_id  amount
0        1     100
1        2     300
Порешать Python-задачи в тренажёре →

Типичная ошибка

Ключевая разница: .loc включает правую границу среза (df.loc[0:2] вернёт строки 0,1,2), а .iloc — нет (df.iloc[0:2] вернёт 0,1), как обычный Python-срез. Присваивание через цепочку (df[df.a>0]['b'] = ...) даёт SettingWithCopyWarning и может не сработать — пиши df.loc[df.a>0, 'b'] = .... Фильтрация булевой маской — только через .loc.

Где спрашивают на собеседовании

Разница loc/iloc — базовый вопрос по pandas. Спрашивают, чем метки отличаются от позиций, как отфильтровать по условию (loc + маска) и почему цепочечное присваивание опасно (SettingWithCopyWarning). Умей выбрать строки и столбцы одновременно.

FAQ: частые вопросы про loc / iloc

В чём разница loc и iloc?

.loc выбирает по меткам (имена индекса/колонок) и поддерживает булевы условия. .iloc — по числовым позициям (0,1,2…). Ещё отличие: срез .loc включает правую границу, .iloc — нет.

Как отфильтровать строки по условию в pandas?

Булевой маской через .loc: df.loc[df['col'] > 10]. Можно сразу выбрать колонки: df.loc[df['col'] > 10, ['a', 'b']].

Что такое SettingWithCopyWarning?

Предупреждение о присваивании через цепочку (df[mask]['col'] = ...), которое может менять копию, а не оригинал. Правильно: df.loc[mask, 'col'] = значение — одно обращение через .loc.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: основы

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

Открыть Python-тренажёр (556 задач) →