В чем разница между loc и iloc в Pandas?

«В чем разница между loc и iloc в Pandas?» — вопрос из категории Pandas и NumPy, который задают на 35% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

loc и iloc — это два основных метода для доступа к данным в DataFrame и Series по строкам и столбцам. Их главное отличие — в типе индексации.

loc — выбор по метке (label-based):

  • Использует фактические значения индексов строк и названия столбцов.
  • Включает конечную границу в срезе.
  • Синтаксис: df.loc[строки, столбцы].

iloc — выбор по позиции (integer position-based):

  • Использует целочисленные позиции (как в обычных списках или массивах NumPy).
  • Исключает конечную границу в срезе (как стандартные срезы Python).
  • Синтаксис: df.iloc[строки, столбцы].

Наглядные примеры:

import pandas as pd
data = {'A': [10, 20, 30, 40], 'B': [50, 60, 70, 80]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
print(df)
#    A   B
# a  10  50
# b  20  60
# c  30  70
# d  40  80

# loc — по меткам
print(df.loc['b', 'A'])          # 20 (одна ячейка)
print(df.loc['b':'c', 'A':'B'])  # Строки от 'b' до 'c' ВКЛЮЧИТЕЛЬНО и столбцы от 'A' до 'B' ВКЛЮЧИТЕЛЬНО
#    A   B
# b  20  60
# c  30  70

# iloc — по позициям
print(df.iloc[1, 0])             # 20 (строка с позицией 1, столбец с позицией 0)
print(df.iloc[1:3, 0:2])         # Строки с позиции 1 ДО 3 (ИСКЛЮЧАЯ 3) и столбцы 0:2 (ИСКЛЮЧАЯ 2)
#    A   B
# b  20  60
# c  30  70

Ключевое правило: loc работает с тем, что вы видите в индексе, iloc — с внутренними порядковыми номерами.