.loc и .iloc — два основных способа выбирать данные в pandas. .loc обращается по меткам (имена индекса и колонок) и понимает булевы условия для фильтрации. .iloc обращается по числовым позициям, как в списках 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.