В этой шестой части изучения 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 :

  1. .iloc использует неявные индексы позиций, тогда как .loc использует явные помеченные индексы.
  2. Еще одно основное отличие заключается в .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 с сериями в пандах. В следующей части серии мы рассмотрим дополнительные атрибуты для серий и рассмотрим некоторые важные методы серий !!

Надеюсь, вам понравилась статья, и вы узнали что-то новое сегодня. Продолжайте изучать и продолжайте учиться !!!