← Назад к вопросам

В чём разница между задачами регрессии и классификации ранжирования?

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!