Как выбрать строки по индексу в Pandas DataFrame


Часто вам может понадобиться выбрать строки кадра данных pandas на основе их значения индекса.

Если вы хотите выбрать строки на основе целочисленного индексирования, вы можете использовать функцию .iloc .

Если вы хотите выбрать строки на основе индексации меток, вы можете использовать функцию .loc .

В этом руководстве представлен пример использования каждой из этих функций на практике.

Пример 1: выбор строк на основе целочисленного индексирования

В следующем коде показано, как создать кадр данных pandas и использовать .iloc для выбора строки с целочисленным значением индекса 4 :

import pandas as pd
import numpy as np

#make this example reproducible
np.random.seed (0)

#create DataFrame
df = pd.DataFrame(np.random.rand (6,2), index=range(0,18,3), columns=['A', 'B'])

#view DataFrame
df

 A B
0 0.548814 0.715189
3 0.602763 0.544883
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442
15 0.791725 0.528895

#select the 5th row of the DataFrame
df.iloc [[4]]

 A B
12 0.963663 0.383442

Мы можем использовать аналогичный синтаксис для выбора нескольких строк:

#select the 3rd, 4th, and 5th rows of the DataFrame
df.iloc [[2, 3, 4]]

 A B
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442

Или мы могли бы выбрать все строки в диапазоне:

#select the 3rd, 4th, and 5th rows of the DataFrame
df.iloc [2:5]

 A B
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442

Пример 2. Выбор строк на основе индексации меток

В следующем коде показано, как создать кадр данных pandas и использовать .loc для выбора строки с меткой индекса 3 :

import pandas as pd
import numpy as np

#make this example reproducible
np.random.seed (0)

#create DataFrame
df = pd.DataFrame(np.random.rand (6,2), index=range(0,18,3), columns=['A', 'B'])

#view DataFrame
df

 A B
0 0.548814 0.715189
3 0.602763 0.544883
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442
15 0.791725 0.528895

#select the row with index label '3'
df.loc[[3]]

 A B
3 0.602763 0.544883

Мы можем использовать аналогичный синтаксис для выбора нескольких строк с разными метками индекса:

#select the rows with index labels '3', '6', and '9'
df.loc[[3, 6, 9]]

 A B
3 0.602763 0.544883
6 0.423655 0.645894
9 0.437587 0.891773

Разница между .iloc и .loc

Приведенные выше примеры иллюстрируют тонкую разницу между .iloc и .loc :

  • .iloc выбирает строки на основе целочисленного индекса.Итак, если вы хотите выбрать 5-ю строку в DataFrame, вы должны использовать df.iloc[[4]], так как первая строка имеет индекс 0, вторая строка имеет индекс 1 и так далее.
  • .loc выбирает строки на основе помеченного индекса.Итак, если вы хотите выбрать строку с меткой индекса 5, вы должны напрямую использовать df.loc[[5]].

Дополнительные ресурсы

Как получить номера строк в кадре данных Pandas
Как удалить строки со значениями NaN в Pandas
Как удалить столбец индекса в Pandas