Функция Pandas df.iloc[]
Часто используемые функции Pandas
iloc[]Это метод индексации по целочисленным позициям в Pandas, используемый для выбора данных по номерам строк и столбцов. Онloc[]отличается,iloc[]полностью основан на позиции данных (целочисленный индекс, начинающийся с 0), без учета меток, заданных на самих данных.
Когда нужно выбрать данные по позиции или выбрать данные, не зная конкретных меток индекса,iloc[]это лучший выбор. Принцип его работы очень похож на индексацию списков Python, что делает его очень интуитивно понятным для пользователей Python.
Базовый синтаксис и параметры
iloc[]Это индексатор DataFrame, доступ к которому осуществляется через квадратные скобки[]Он принимает в качестве параметров только целые числа, списки целых чисел, срезы целых чисел или логические массивы.
Формат синтаксиса
# 选择单行(返回 Series) DataFrame.iloc[行号] # 选择多行(返回 DataFrame) DataFrame.iloc[[行号1, 行号2, ...]] # 使用切片选择连续行 DataFrame.iloc[起始行:结束行] # 选择行和列 DataFrame.iloc[行号, 列号] DataFrame.iloc[行切片, 列切片] DataFrame.iloc[行列表, 列列表]
Описание параметра
| Позиция параметра | Тип параметра | Описание |
|---|---|---|
| Первый параметр (строки) | Целое число, список целых чисел, срез целых чисел, логический массив | Используется для выбора строк по позиции (начиная с 0). |
| Второй параметр (столбцы) | Целое число, список целых чисел, срез целых чисел | Необязательно, используется для выбора столбцов, также по позиции. |
Описание возвращаемого значения
- Один элемент: возвращает скалярное значение.
- Одна строка: возвращает Series.
- Несколько строк: возвращает DataFrame.
- Комбинация строк и столбцов: возвращает Series или DataFrame в зависимости от результата выбора.
Примеры
Давайте всесторонне освоимiloc[]его использование на богатом наборе примеров.
Пример 1: Базовое использование — Выбор строк
iloc[]Использует индексацию по позиции, очень похожую на индексацию списков в Python.
Пример
# Создать пример DataFrame
data = {
'name': ['Алиса', 'Боб', 'Чарли', 'Дэвид', 'Ева'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
print("Исходный DataFrame:")
print(df)
print()
# Выбрать первую строку (индекс 0)
print("Выберите первую строку (позиция 0):")
print(df.iloc[0])
print()
# Выбрать несколько строк
print("Выберите строки 1, 3, 4:")
print(df.iloc[[1, 3, 4]])
print()
# Использовать срезы для выбора последовательных строк (примечание: срезы iloc включают левую границу и не включают правую, как в Python)
print("Выберите строки с 1 по 3 (позиции 1, 2, 3):")
print(df.iloc[1:4])
print()
# Выбрать первые 3 строки
print("Первые 3 строки:")
print(df.iloc[:3])
Вывод:
原始 DataFrame:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
4 Eve 20 88 B
选择第一行(位置 0):
name Alice
age 18
score 85
grade A
Name: 0, dtype: object
选择第 1、3、4 行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
选择第 1 行到第 3 行(位置 1、2、3):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
前 3 行:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
Анализ кода:
df.iloc[0]Выбор первой строки (позиция 0) возвращает Series.iloc[]Срез включает левую границу и не включает правую: позиции 1, 2, 3 включаются, а позиция 4 — нет.df.iloc[[1, 3, 4]]Выбирает строки по нескольким заданным позициям.df.iloc[:3]Пропуск начальной позиции означает начало с 0.
Пример 2: Выбор конкретных строк и столбцов
iloc[]Можно выбирать строки и столбцы одновременно, точно определяя их по номерам позиций.
Пример
data = {
'name': ['Алиса', 'Боб', 'Чарли', 'Дэвид', 'Ева'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# Выбор одной ячейки (вторая строка, третий столбец)
print("Выбор ячейки в позиции [1, 2]:")
print(df.iloc[1, 2]) # возвращает 92
print()
# Выбор определённых столбцов конкретной строки
print("Выбор столбцов 1 и 3 строки 0:")
print(df.iloc[0, [1, 3]])
print()
# Выбор нескольких строк и столбцов
print("Выбор строк 0, 2, 4 и столбцов 0, 2:")
print(df.iloc[[0, 2, 4], [0, 2]])
print()
# Выбор определённых столбцов всех строк
print("Столбцы 0 и 2 всех строк:")
print(df.iloc[:, [0, 2]])
print()
# Совмещение среза строк и среза столбцов
print("Строки с 1 по 3, столбцы с 0 по 2 (не включая):")
print(df.iloc[1:4, :3])
Вывод:
选择位置 [1, 2] 的单元格:
92
选择第 0 行的第 1 和第 3 列:
age 19
grade A
Name: 0, dtype: object
选择第 0、2、4 行的第 0、2 列:
name score
0 Alice 85
2 Charlie 78
4 Eve 88
所有行的第 0 和第 2 列:
name score
0 Alice 85
1 Bob 92
2 Charlie 78
3 David 90
4 Eve 88
第 1 到 3 行的第 0 到第 2 列(不含):
name age
1 Bob 19
2 Charlie 17
3 David 18
Анализ кода:
df.iloc[1, 2]Выбор одной ячейки возвращает скалярное значение.df.iloc[0, [1, 3]]Выбирает несколько столбцов определённой строки.df.iloc[:, [0, 2]]Двоеточие означает выбор всех строк.iloc[]Срезы следуют соглашениям Python: левая граница включается, правая не включается (конечная позиция исключается).
Пример 3: Использование с пользовательским индексом
Когда DataFrame имеет пользовательский индекс,iloc[]данные по-прежнему выбираются по позиции независимо от меток индекса.
Пример
# Создать DataFrame с пользовательским индексом
data = {
'name': ['Алиса', 'Боб', 'Чарли', 'Дэвид', 'Ева'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print("DataFrame с пользовательским индексом:")
print(df)
print()
# iloc по-прежнему выбирает по позиции, не завися от пользовательского индекса
print("iloc")
print(df.iloc[0])
print()
print("iloc[1:3] выбирает строки 2 и 3 (позиции 1, 2):")
print(df.iloc[1:3])
print()
# Использование отрицательной индексации (отсчёт с конца)
print("Последняя строка (позиция -1):")
print(df.iloc[-1])
print()
print("Последние 3 строки:")
print(df.iloc[-3:])
Вывод:
带自定义索引的 DataFrame:
name age score
a Alice 18 85
b Bob 19 92
c Charlie 17 78
d David 18 90
e Eve 20 88
iloc[0] 选择第一行(位置 0),与标签 'a', 'b', 'c' 无关:
name Alice
age 18
score 85
Name: a, dtype: object
iloc[1:3] 选择第 2、3 行(位置 1、2):
name age score
b Bob 19 92
c Charlie 17 78
最后一行(位置 -1):
name Eve
age 20
score 88
Name: e, dtype: object
倒数 3 行:
name age score
c Charlie 17 78
d David 18 90
e Eve 20 88
Анализ кода:
- Даже если DataFrame использует пользовательский индекс ('a', 'b', 'c', 'd', 'e'),
iloc[]он всё равно выбирает по позиции. iloc[0]Всегда выбирает первую строку (физическую позицию), независимо от метки индекса.ilocПоддерживает отрицательную индексацию: -1 обозначает последнюю строку, -2 — предпоследнюю строку, и так далее.
Пример 4: Выбор с помощью булевых массивов
iloc[]Он также поддерживает выбор с помощью булевых массивов, что полезно для условной фильтрации.
Пример
data = {
'name': ['Алиса', 'Боб', 'Чарли', 'Дэвид', 'Ева'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# Выбор с помощью булева массива
bool_array = [True, False, True, False, True]
print("Строки, выбранные с помощью логического массива [True, False, True, False, True]:")
print(df.iloc[bool_array])
print()
# Использование с условиями (сначала вычислите логический массив, затем используйте его с iloc)
# Выбрать строки с оценками больше 85
condition = df['score'] > 85
print("Строки с оценками больше 85:")
print(df.iloc[condition.values]) # Получить логический массив
print()
# Выбрать определённые столбцы после выбора строк в определённых позициях
print("Строки 1 и 3, столбцы 1 и 2:")
print(df.iloc[[1, 3], 1:3])
Вывод:
使用布尔数组 [True, False, True, False, True] 选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
第 1、3 行的第 1、2 列:
age score
1 19 92
3 18 90
Анализ кода:
- Длина логического массива должна соответствовать числу строк (для выбора строк) или числу столбцов (для выбора столбцов).
ilocПри использовании булева массива, в отличие отloc[]условной фильтрации, он напрямую выбирает по позиции.- Можно использовать шаг среза для выбора определённых шаблонов, например выбор каждой второй строки.
Примечания
iloc[]Он использует позиционную индексацию; срезы следуют соглашениям Python (левый край включается, правый не включается).- Если передана позиция вне диапазона, возникает IndexError.
- Поддерживает отрицательную индексацию: -1 обозначает последнюю строку, -2 — предпоследнюю строку.
- и
loc[]В отличие от этого,iloc[]он не поддерживает прямую фильтрацию с помощью условных выражений; сначала нужно вычислить булев массив.
Важное примечание:
loc[]иiloc[]Это различие — ключевой момент при изучении Pandas.loc[]loc основан на метках,iloc[]iloc основан на позициях. При разработке рекомендуется чётко различать эти два варианта, чтобы избежать ошибок, вызванных путаницей.
Итог
iloc[]Это селектор данных, основанный на целочисленной позиции в Pandas и обеспечивающий индексацию, аналогичную спискам Python. Его главная особенность в том, что он полностью основан на позиции данных (начиная с 0) и не зависит от пользовательских меток индекса.
На практике,iloc[]он особенно подходит для следующих сценариев: когда нужно выбирать данные по позиции, когда нужно использовать отрицательную индексацию, когда нужно использовать шаги среза и при выборе данных без определённых меток индекса. В сочетании сloc[]иiloc[], он может гибко обрабатывать различные потребности в выборе данных.