В этой шестой части изучения pandas мы рассмотрим
iloc
индексаторы для индексации и нарезки вPandas.Series
. Если вы сразу перешли сюда, вы можете проверитьPart-4
, чтобы узнать, зачем нам нужны индексаторы, иPart-5
для.loc
индексатора:
Изучая .iloc , мы также будем compare the same with .loc along the way
, Так что лучше бы пройти Part-5
серии .
Атрибут
.iloc
относится кimplicit position indexes
для индексации и нарезки. Это означает, что он основан на положении элементов данных, а не на метках индекса.
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], index=[3,4,2,1,5,6], name='series_name1') print("iloc works on position of element:",series1.iloc[4]) print("loc works on index label:",series1.loc[4]) Output: iloc works on position of element: 15 loc works on index label: 12
series1.iloc[4]
, 4 — этоposition of the element
, позиция начинается с 0 и заканчивается на len-1 так же, как и у массива.
series1.loc[4]
, 4 – этоindex label
серии.
Если мы попытаемся получить доступ к позиции/индексу больше, чем len-1 , мы получимIndexError: одиночный позиционный индексатор выходит за границы
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], index=[3,4,2,1,5,6], name='series_name1') series1.iloc[6] Output: IndexError: single positional indexer is out-of-bounds
В приведенном выше примере total 6 elements and implicit position index exist from 0 to 5
. Мы попытались получить доступ к индексу 6, которого нет, поэтому мы получили ошибку индекса (за пределами).
Вопрос: - В каком сценарии output of loc and iloc will be same ?
это очень прямо, просто подумайте, прежде чем прокручивать ответ.
Ответ: - Да, вы правильно поняли!! Если мы не укажем явный индекс при создании серии, выходные данные как с .loc, так и с .iloc для серии будут одинаковыми, поскольку неявные индексы всегда присутствуют от 0 до len-1 .
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], name='series_name1') print("Output with iloc:",series1.iloc[3]) print("Output with loc:",series1.loc[3]) Output with iloc: 44 Output with loc: 44
Fancy Indexing with .iloc
: Если вы хотите выбрать значения для нескольких индексов позиций за один раз, которые не являются последовательными, вы можете использовать причудливую индексацию, в которой вы передаете список индексов позиций, которые хотите получить данные
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], index=[3,4,2,1,5,6], name='series_name1') series1.iloc[[1,4,2]] 1 12 4 15 2 19 Name: series_name1, dtype: int64
Note:- Keep in mind that with iloc 1,4 and 2 are position indexes not label indexes
Логический массив в качестве индексатора для серий с iloc: - Мы можем использовать логический массив в качестве индексатора, будут выбраны индексы, для которых значение в массиве истинно.
import pandas as pd
series1 = pd.Series([10,12,19,44,15,60],
index=[3,4,2,1,5,6],
name='series_name1')
print("======Output With iloc=======")
print(series1.iloc[[True,False,True,False,True,False]])
print("======Output With loc========")
print(series1.loc[[True,False,True,False,True,False]])
======Output With iloc
=======
3 10
2 19
5 15
Name: series_name1, dtype: int64
======Output With loc========
3 10
2 19
5 15
Name: series_name1, dtype: int64
Итак, это то же самое, что и атрибут .loc для логического массива в качестве индексатора, и вы правильно догадались: - output of both .loc and .iloc with boolean array will be same .
Это начало индексации с помощью последовательного атрибута
.iloc
, давайте начнем разбираться сslicing using .iloc attribute
→Нарезка: — Нарезка — это механизм, с помощью которого мы можем извлекать подмножества на основе диапазона из различных структур данных, таких как ряды, кадры данных и т. д.
SЛицирование с атрибутом .iloc относится к
implicit position indexes
в серии, а не к помеченным индексам:
Формат фрагмента → [начало]:[конец][:шаг] → начало, конец и шаг являются целыми числами, а квадратные скобки представляют необязательные значения.
При использовании .iloc есть 2 основных отличия от .loc :
- .iloc использует неявные индексы позиций, тогда как .loc использует явные помеченные индексы.
- Еще одно основное отличие заключается в
.iloc [end] is exclusive
, тогда как[end] is inclusive in case of .loc
, как мы обсуждали в прошлой Часть 5,
Давайте проверим то же самое на следующем примере:
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], index=['0','1','2','3','4','5'], name='series_name1') print("=== .iloc refers to implicit position indexes and End is Exclusive while slicing with iloc ===") print(series1.iloc[0:2]) print("\n") print("=== .loc refers to explicit labeled indexes and End is Inclusive while slicing with iloc ===") print(series1.loc['0':'2'])
Вывод: - Итак, как и в приведенном выше коде, для .iloc мы перемещаемся с позиции index 0 to 1 because [end] →2 is exclusive for .iloc
, а для .loc мы перемещаемся с ‘0’ to ‘2’ becasue [end] →’2' is inclusive for .loc
.
=== .iloc refers to implicit position indexes and End is Exclusive while slicing with iloc === 0 10 1 12 Name: series_name1, dtype: int64 === .loc refers to explicit labeled indexes and End is Inclusive while slicing with iloc === 0 10 1 12 2 19 Name: series_name1, dtype: int64
Необязательное начало/конец в нарезке: как видно из формата, [начало] и [конец] являются необязательными,
If we don’t provide any value for start , it start with the first index
и
if we don’t provide end , it will consider last index as end
.
import pandas as pd series1 = pd.Series([10,12,19,44,15,60], index=['a','c','d','e','b','f'], name='series_name1') print(series1.iloc[:4]) #will stop at index 3 coz 4 is exclusive print(series1.iloc[3:]) #will start from index 3 coz 3 is inclusive Output: a 10 c 12 d 19 e 44 Name: series_name1, dtype: int64 e 44 b 15 f 60 Name: series_name1, dtype: int64
Итак, речь шла о начале работы с индексатором .iloc с сериями в пандах. В следующей части серии мы рассмотрим дополнительные атрибуты для серий и рассмотрим некоторые важные методы серий !!
Надеюсь, вам понравилась статья, и вы узнали что-то новое сегодня. Продолжайте изучать и продолжайте учиться !!!