Лабораторная работа 6 Индексаци, сортировка и фильтрация


Выборка с помощью loc и iloc



бет4/10
Дата14.10.2023
өлшемі184.93 Kb.
#480761
түріЛабораторная работа
1   2   3   4   5   6   7   8   9   10
Лабораторная работа 6 Анализ данных

Выборка с помощью loc и iloc
Для доступа к строкам DataFrame по индексу с помощью меток я ввел специальные индексные операторы loc и iloc. Они позволяют выбрать подмножество строк и столбцов DataFrame с применением нотации NumPy, используя либо метки строк (loc), либо целые числа (iloc). столбцов по меткам:

In [137]: data.loc['Colorado', ['two', 'three']]


Out[137]:
two 5
three 6
Name: Colorado, dtype: int64

Затем произведем аналогичную выборку, но уже по целочисленным индексам:


In [138]: data.iloc[2, [3, 0, 1]]


Out[138]:
four 11
one 8
two 9
Name: Utah, dtype: int64

In [139]: data.iloc[2]


Out[139]:
one 8
two 9
three 10
four 11
Name: Utah, dtype: int64

In [140]: data.iloc[[1, 2], [3, 0, 1]]


Out[140]:
four one two
Colorado 7 0 5
Utah 11 8 9

Обе функции индексирования работают не только с одиночными метками или списками меток, но и со срезами:


In [141]: data.loc[:'Utah', 'two']


Out[141]:
Ohio 0
Colorado 5
Utah 9
Name: two, dtype: int64

In [142]: data.iloc[:, :3][data.three > 5]


Out[142]:
one two three
Colorado 0 5 6
Utah 8 9 10
New York 12 13 14

Таким образом, существует много способов выборки и реорганизации данных, содержащихся в объекте pandas. Для DataFrame краткая сводка многих из них приведена в табл. 5.4. Позже мы увидим, что при работе с иерархическими индексами есть ряд дополнительных возможностей.







Целочисленные индексы
Новички часто испытывают затруднения при работе с объектами pandas, индексированными целыми числами, из-за различий с семантикой индексирования встроенных в Python структур данных, таких как списки и кортежи. Например, вряд ли вы ожидаете столкнуться с ошибкой в следующем коде:

ser = pd.Series(np.arange(3.))


ser
ser[–1]

В данном примере pandas могла бы откатиться к целочисленному индексированию, но в общем случае попытка сделать это приводит к тонким ошибкам. Здесь мы имеем индекс, содержащий 0, 1, 2, но понять, чего хочет пользователь (индексировать по метке или по позиции), трудно:


In [144]: ser


Out[144]:
0 0.0
1 1.0
2 2.0
dtype: float64

С другой стороны, если индекс не является целым числом, то никакой неоднозначности не возникает:


In [145]: ser2 = pd.Series(np.arange(3.), index=['a', 'b', 'c'])


In [146]: ser2[–1]
Out[146]: 2.0

Чтобы не оставлять место двусмысленности, в случае когда индекс по некоторой оси содержит целые числа, выборка данных всегда производится по метке. А чтобы точно выразить свои намерения, используйте метод loc (для доступа по метке) или iloc (для доступа по позиции):


In [147]: ser[:1]


Out[147]:
0 0.0
dtype: float64

In [148]: ser.loc[:1]


Out[148]:
0 0.0
1 1.0
dtype: float64

In [149]: ser.iloc[:1]


Out[149]:
0 0.0
dtype: float64




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет