Функция Pandas df.iloc[]

Pandas 常用函数Часто используемые функции 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.

Пример

import pandas as pd

# Создать пример 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

Анализ кода:

  1. df.iloc[0]Выбор первой строки (позиция 0) возвращает Series.
  2. iloc[]Срез включает левую границу и не включает правую: позиции 1, 2, 3 включаются, а позиция 4 — нет.
  3. df.iloc[[1, 3, 4]]Выбирает строки по нескольким заданным позициям.
  4. df.iloc[:3]Пропуск начальной позиции означает начало с 0.

Пример 2: Выбор конкретных строк и столбцов

iloc[]Можно выбирать строки и столбцы одновременно, точно определяя их по номерам позиций.

Пример

import pandas as pd

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

Анализ кода:

  1. df.iloc[1, 2]Выбор одной ячейки возвращает скалярное значение.
  2. df.iloc[0, [1, 3]]Выбирает несколько столбцов определённой строки.
  3. df.iloc[:, [0, 2]]Двоеточие означает выбор всех строк.
  4. iloc[]Срезы следуют соглашениям Python: левая граница включается, правая не включается (конечная позиция исключается).

Пример 3: Использование с пользовательским индексом

Когда DataFrame имеет пользовательский индекс,iloc[]данные по-прежнему выбираются по позиции независимо от меток индекса.

Пример

import pandas as pd

# Создать 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[]Он также поддерживает выбор с помощью булевых массивов, что полезно для условной фильтрации.

Пример

import pandas as pd

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

Анализ кода:

  1. Длина логического массива должна соответствовать числу строк (для выбора строк) или числу столбцов (для выбора столбцов).
  2. ilocПри использовании булева массива, в отличие отloc[]условной фильтрации, он напрямую выбирает по позиции.
  3. Можно использовать шаг среза для выбора определённых шаблонов, например выбор каждой второй строки.

Примечания

  • iloc[]Он использует позиционную индексацию; срезы следуют соглашениям Python (левый край включается, правый не включается).
  • Если передана позиция вне диапазона, возникает IndexError.
  • Поддерживает отрицательную индексацию: -1 обозначает последнюю строку, -2 — предпоследнюю строку.
  • иloc[]В отличие от этого,iloc[]он не поддерживает прямую фильтрацию с помощью условных выражений; сначала нужно вычислить булев массив.

Важное примечание:loc[]иiloc[]Это различие — ключевой момент при изучении Pandas.loc[]loc основан на метках,iloc[]iloc основан на позициях. При разработке рекомендуется чётко различать эти два варианта, чтобы избежать ошибок, вызванных путаницей.


Итог

iloc[]Это селектор данных, основанный на целочисленной позиции в Pandas и обеспечивающий индексацию, аналогичную спискам Python. Его главная особенность в том, что он полностью основан на позиции данных (начиная с 0) и не зависит от пользовательских меток индекса.

На практике,iloc[]он особенно подходит для следующих сценариев: когда нужно выбирать данные по позиции, когда нужно использовать отрицательную индексацию, когда нужно использовать шаги среза и при выборе данных без определённых меток индекса. В сочетании сloc[]иiloc[], он может гибко обрабатывать различные потребности в выборе данных.

Pandas 常用函数Часто используемые функции Pandas

Другие расширения