В библиотеке pandas для доступа к элементам объекта Series (и DataFrame) используются два основных индексатора: .loc и. iloc. Они предоставляют гибкие и мощные способы выбора данных.
Series — это одномерный массив, способный хранить данные любого типа (целые числа, строки, числа с плавающей запятой, объекты Python и т. д.). Он имеет как значения, так и ассоциированный с ними индекс.
.loc — Доступ По Метке (label-based indexing)
- loc используется для выбора данных По меткам (лейблам) индекса. Он включает Конечную метку при нарезке (слайсинге). Может использоваться как с числовыми, так и с нечисловыми индексами.
Синтаксис:
Python
Series. loc[label]
Series. loc[[label1, label2, …]]
Series. loc[start_label:end_label]
Series. loc[boolean_array]
Примеры:
Python
Import pandas as pd
# Series с пользовательским строковым индексом
S1 = pd. Series([10, 20, 30, 40, 50], index=[‘a’, ‘b’, ‘c’, ‘d’, ‘e’])
Print("Series s1:\n", s1)
# Series с числовым индексом по умолчанию
S2 = pd. Series([100, 200, 300, 400, 500])
Print("\nSeries s2:\n", s2)
Print("\n— Использование. loc —")
# 1. Доступ к одному элементу по метке
Print("\nДоступ к ‘c’ в s1:", s1.loc[‘c’]) # Вывод: 30
Print("Доступ к 2 в s2:", s2.loc[2]) # Вывод: 300
# 2. Доступ к нескольким элементам по списку меток
Print("\nДоступ к [‘a’, ‘c’] в s1:\n", s1.loc[[‘a’, ‘c’]])
# Вывод:
# a 10
# c 30
# dtype: int64
# 3. Нарезка (слайсинг) по меткам (включая конечную метку!)
Print("\nНарезка от ‘b’ до ‘d’ в s1:\n", s1.loc[‘b’:’d’])
# Вывод:
# b 20
# c 30
# d 40
# dtype: int64
Print("\nНарезка от 1 до 3 в s2:\n", s2.loc[1:3])
# Вывод:
# 1 200
# 2 300
# 3 400
# dtype: int64
# 4. Булева индексация (фильтрация)
Print("\nЭлементы s1 > 25:\n", s1.loc[s1 > 25])
# Вывод:
# c 30
# d 40
# e 50
# dtype: int64
.iloc — Доступ по целочисленной позиции (integer-location based indexing)
- iloc используется для выбора данных По целочисленным позициям (индексам) элементов, начиная с 0. Он Не включает конечную позицию при нарезке (как в стандартном Python-слайсинге). Всегда работает с числовыми позициями, независимо от типа индекса Series.
Синтаксис:
Python
Series. iloc[integer_position]
Series. iloc[[pos1, pos2, …]]
Series. iloc[start_pos:end_pos]
Series. iloc[boolean_array]
Примеры:
Python
Import pandas as pd
# Series с пользовательским строковым индексом
S1 = pd. Series([10, 20, 30, 40, 50], index=[‘a’, ‘b’, ‘c’, ‘d’, ‘e’])
Print("Series s1:\n", s1)
# Series с числовым индексом по умолчанию
S2 = pd. Series([100, 200, 300, 400, 500])
Print("\nSeries s2:\n", s2)
Print("\n— Использование. iloc —")
# 1. Доступ к одному элементу по целочисленной позиции
Print("\nДоступ к элементу по позиции 2 в s1:", s1.iloc[2]) # Вывод: 30 (‘c’)
Print("Доступ к элементу по позиции 2 в s2:", s2.iloc[2]) # Вывод: 300 (значение на индексе 2)
# 2. Доступ к нескольким элементам по списку позиций
Print("\nДоступ к элементам по позициям [0, 2] в s1:\n", s1.iloc[[0, 2]])
# Вывод:
# a 10
# c 30
# dtype: int64
# 3. Нарезка (слайсинг) по позициям (исключая конечную позицию!)
Print("\nНарезка от позиции 1 до 3 (не включая) в s1:\n", s1.iloc[1:3])
# Вывод:
# b 20
# c 30
# dtype: int64
Print("\nНарезка от позиции 1 до 3 (не включая) в s2:\n", s2.iloc[1:3])
# Вывод:
# 1 200
# 2 300
# dtype: int64
# 4. Булева индексация (фильтрация) — работает так же, как с. loc
Print("\nЭлементы s1 > 25 (iloc):\n", s1.iloc[s1.values > 25]) # s1.values возвращает массив NumPy для сравнения
# Вывод:
# c 30
# d 40
# e 50
# dtype: int64
Ключевые различия и когда что использовать:
Feature |
.loc |
.iloc |
Основа доступа |
Метки (лейблы) индекса |
Целочисленные позиции (0-based) |
Слайсинг |
Включает Конечную метку |
Исключает Конечную позицию |
Тип индекса |
Работает с любым типом индекса Series |
Работает только с целочисленными позициями |
Лучше для |
Когда вам нужны данные по их именам/меткам |
Когда вам нужны данные по их абсолютному положению |
В основном, если вы знаете имя (метку) элемента, который хотите выбрать, используйте. loc. Если вы знаете его порядковый номер (позицию) в Series, используйте. iloc.