← Назад к вопросам
В чём разница между задачами регрессии и классификации ранжирования?
2.0 Middle🔥 131 комментариев
#Машинное обучение
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
В чем разница между loc и iloc в Pandas?
loc и iloc — два способа выбирать данные из DataFrame. Главная разница: label-based vs position-based.
Быстрое сравнение
loc: Label-based (по названиям)
iloc: Integer location (по позициям)
loc: Label-based Selection
Выбирает по названиям строк и столбцов.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35]
}, index=['person1', 'person2', 'person3'])
# Выбрать строку по label
print(df.loc['person2'])
# name Bob
# age 30
# Выбрать ячейку
print(df.loc['person2', 'age']) # 30
# Срез ВКЛЮЧАЕТ обе границы!
print(df.loc['person1':'person2']) # person1 и person2
iloc: Integer Location
Выбирает по позициям (как Python списки).
# Выбрать строку по позиции
print(df.iloc[1])
# name Bob
# age 30
# Выбрать ячейку по позиции
print(df.iloc[1, 1]) # 30
# Срез НЕ включает правую границу!
print(df.iloc[0:2]) # Позиции 0, 1 (не 2)
# Отрицательные индексы работают
print(df.iloc[-1]) # Последняя строка
КРИТИЧЕСКАЯ РАЗНИЦА: Включение границ
# loc ВКЛЮЧАЕТ ОБЕЛИ границы
df.loc['person1':'person3'] # person1, person2, person3 ✓
# iloc НЕ включает правую (как Python срезы)
df.iloc[0:3] # позиции 0, 1, 2 ✓
df.iloc[0:2] # позиции 0, 1 (не 2!)
Фильтрация по условию
# loc для условной фильтрации
df.loc[df['age'] > 25] # ✓ Правильно
# iloc НЕ может напрямую
df.iloc[df['age'] > 25] # ❌ Ошибка!
Выбор столбцов
# loc по названиям
df.loc[:, ['name', 'age']]
# iloc по позициям
df.iloc[:, [0, 1]]
Когда использовать что
loc:
- Выбор по названиям
- Фильтрация по условию
- Временные ряды (по датам)
df.loc['2020-01-01':'2020-12-31']
df.loc[df['status'] == 'active']
iloc:
- Выбор по позициям
- Первые N строк
- Последние N строк
- Обычно быстрее
df.iloc[10:20]
df.iloc[[0, 5, 10]]
df.iloc[-5:]
Performance
iloc обычно быстрее на 2-3x для больших DataFrames.
Частые ошибки
# ❌ Неправильно: строка с iloc
df.iloc['person1'] # TypeError!
# ✓ Правильно
df.loc['person1']
# ❌ Неправильно: условие с iloc
df.iloc[df['age'] > 25] # TypeError!
# ✓ Правильно
df.loc[df['age'] > 25]
at и iat: Одиночная ячейка
df.at['person2', 'age'] # по label (быстро)
df.iat[1, 1] # по позиции (быстро)
# Быстрее чем loc/iloc для одной ячейки
Чек-лист
- ✓ loc — по названиям, ВКЛЮЧАЕТ обе границы
- ✓ iloc — по позициям, не включает правую
- ✓ loc для условий (df.loc[mask])
- ✓ iloc для слайсов по позициям
- ✓ at/iat быстрее для одной ячейки
- ✓ iloc обычно быстрее на больших данных
Вывод
- loc: "Дай мне строку с именем Alice" → label-based
- iloc: "Дай мне 5-ю строку" → position-based
Оба необходимы для эффективной работы с Pandas!