Ответ
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 — с внутренними порядковыми номерами.