Выборка столбцов и строк: [], loc и iloc без цепочной индексации
Содержание курса
iloc — выборка по целочисленным позициям
iloc работает не с метками, а с порядковыми номерами строк и столбцов — теми самыми позициями, которые всегда начинаются с нуля независимо от того, что написано в индексе.
Это принципиально важно. В нашем DataFrame индекс — строки 'a', 'b', 'c', 'd'. Через loc к первой строке обращаешься как df.loc['a']. Через iloc — как df.iloc[0]. Если бы индекс был числовым, но начинался с 5, через iloc[0] всё равно получишь первую строку, а не ту, у которой метка 5.
Строка и ячейка по позиции
import pandas as pd
df = pd.DataFrame({
'name': ['Анна', 'Борис', 'Вера', 'Григорий'],
'score': [85, 92, 78, 95],
'city': ['Москва', 'Казань', 'Москва', 'Уфа']
}, index=['a', 'b', 'c', 'd'])
print(df.iloc[0])
# name Анна
# score 85
# city Москва
# Name: a, dtype: object
print(df.iloc[1, 0]) # 'Борис'
df.iloc[0] — первая строка, возвращает Series. df.iloc[1, 0] — строка с позицией 1, столбец с позицией 0 — скалярное значение. Столбцы тоже нумеруются с нуля: name → 0, score → 1, city → 2.
Срез по позициям
Здесь важное отличие от loc: правая граница среза не включается — точно как в обычном Python-срезе.
print(df.iloc[0:2])
# name score city
# a Анна 85 Москва
# b Борис 92 Казань
df.iloc[0:2] возвращает строки с позициями 0 и 1 — строка с позицией 2 (метка 'c') не попадает в результат. Для сравнения, df.loc['a':'c'] включало бы 'c'. Разная семантика границ — самая частая точка путаницы при переключении между loc и iloc.
Список позиций
print(df.iloc[[0, 3]])
# name score city
# a Анна 85 Москва
# d Григорий 95 Уфа
Список позиций позволяет выбирать строки в произвольном порядке — не обязательно подряд. Здесь берём первую и последнюю строку.
Когда нужен iloc, а не loc
iloc полезен тогда, когда метки индекса либо неизвестны, либо вообще не важны — например, при итерации с числовым шагом, при выборке первых N строк для быстрой проверки (df.iloc[:5]), или когда данные пришли из источника с нестандартным индексом. Если метки известны и осмысленны — удобнее loc.
Оба инструмента делают одно и то же с точки зрения результата, но опираются на разные системы координат: метки vs порядковые номера.
