LOC против ILOC в Pandas: разница между LOC и ILOC в Pandas
Опубликовано: 2020-08-01Оглавление
Лок и илок в пандах
Распространенной причиной путаницы среди новых разработчиков Python является loc и iloc. Они оба кажутся очень похожими и выполняют аналогичные задачи. Так что это может озадачить любого школьника.
Если вы хотите узнать разницу между iloc и loc, вы попали по адресу, потому что в этой статье мы подробно обсудим эту тему. Вы узнаете, в чем ключевое различие между этими функциями, а затем увидите их в действии, чтобы лучше понять концепцию. Ознакомьтесь с нашими курсами по науке о данных, чтобы узнать больше о Pandas.
Давайте начнем.
Разница между loc и iloc
1. iloc в Python
Вы можете использовать iloc в Python для выбора. Он основан на целочисленном местоположении и помогает вам выбирать по положению. Итак, если вы хотите найти строку с индексом 5, iloc покажет вам пятую строку фрейма данных независимо от ее имени или метки.
Вот пример iloc в Python:
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
… {'a': 100, 'b': 200, 'c': 300, 'd': 400},
… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> дф
abcd
0 1 2 3 4
1 100 200 300 400
2 1000 2000 3000 4000
Мы проиндексируем строки скалярным целым числом, используя функцию iloc для приведенного выше кадра данных:
>>> введите (df.iloc [0])
<класс 'pandas.core.series.Series'>
>>> df.iloc[0]
1
Би 2
с 3
д 4
Имя: 0, dtype: int64
2. найти в пандах
Вы можете использовать loc в Pandas для доступа к нескольким строкам и столбцам с помощью меток; однако вы можете использовать его и с булевым массивом.
Если вы используете loc для поиска строки с индексом 5, вы не получите с ней пятую строку. Вместо этого вы получите только строку с именем «5».
Вот пример loc в Pandas:
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
… index=['кобра', 'гадюка', 'сайдвиндер'],
… столбцы = ['max_speed', 'щит'])
>>> дф
max_speed щит
кобра 1 2
гадюка 4 5
сайдвиндер 7 8
Выше была таблица, из которой мы будем извлекать строку:
>>> df.loc['гадюка']
максимальная_скорость 4
щит 5
Имя: гадюка, dtype: int64
Подробный пример для loc vs iloc
Несмотря на то, что мы используем обе эти функции для выбора, было бы лучше, если бы мы рассмотрели подробный пример, чтобы понять их различия.
В нашем примере мы будем использовать набор данных клиентов телекоммуникационных компаний, который доступен на kaggle. Мы добавим его во фрейм данных:
df = pd.read_csv("Projects/churn_prediction/Telco-Customer-Churn.csv")
дф.голова ()
Я БЫ | Пол | старший гражданин | Партнер | иждивенцы | пребывание в должности | Телефон | несколько линий | Интернет | Безопасность | |
0 | 7590-ВХВЭГ | Женский | 0 | да | Нет | 1 | Нет | Нет телефона | DSL | Нет |
1 | 5575-ГНВДЭ | Мужчина | 0 | Нет | Нет | 34 | да | Нет | DSL | да |
2 | 3668-QPYBK | Мужчина | 0 | Нет | Нет | 2 | да | Нет | DSL | да |
Этот набор данных имеет 21 столбец; мы показали лишь некоторые из них в демонстрационных целях. Как мы уже говорили, мы используем loc для выбора данных по метке. Здесь имена столбцов — это их метки столбцов, такие как пол, срок владения, OnlineSecurity; все они являются именами столбцов, а также метками.
Поскольку мы не назначили какой-либо конкретный индекс, панды по умолчанию создадут целочисленный индекс для строк. Метки строк представляют собой целые числа, которые начинаются с 0 и увеличиваются. В этом примере мы увидим, как loc и iloc ведут себя по-разному.
- Выберите строку «1» и столбец «Партнер».
df.loc[1, 'Партнер']
Вывод: «Нет»
Он показывает значение, присутствующее в столбце «Партнер» строки «1».
- Выберите метки строк «4» и столбцы «идентификатор клиента» и «пол».
df.loc[:4, ['customerID', 'пол']]
Пользовательский ИД | Пол | |
0 | 7590-ВХВЭГ | Женский |
1 | 5575-ГНВДЭ | Мужчина |
2 | 3668-QPYBK | Мужчина |
3 | 7795-CFOCW | Мужчина |
4 | 9237-ХКИТУ | Женский |
- Выберите метки строк «1», «2», «3» и столбец «Зависимые».
df.loc[[1,2,3], 'Зависимые']
1 Нет
2 Нет
3 Нет
Имя: Зависимые, dtype: объект
На этот раз мы отфильтруем фрейм данных и применим iloc или loc:
- Выберите метки строк для столбцов «10» и «PhoneService» и «InternetService» клиента, у которого есть партнер (партнер должен быть «да»)
df [df.Partner == 'Да'].loc:10, ['PhoneService', 'InternetService']]
В приведенном выше случае мы применили фильтр к базе данных, но не изменили индекс, поэтому в нашем выводе были пропущены несколько меток строк, которые требовал наш фильтр. Итак, используя здесь loc[:10], мы выбрали строки с метками до «10».
Если, с другой стороны, мы используем здесь iloc и применяем фильтр, мы получим 10 строк, так как iloc выбирает по положению независимо от меток. Вот результат, который мы получим, если применим iloc[:10]:

df[df.Partner == 'Да'].iloc[:10, [6,8]]
ТелефонСервис | Интернет услуги | |
0 | Нет | DSL |
8 | да | Оптоволокно |
10 | да | DSL |
12 | да | Оптоволокно |
15 | да | Оптоволокно |
18 | да | DSL |
21 | да | Нет |
23 | да | DSL |
24 | да | DSL |
26 | да | Оптоволокно |
Вы, должно быть, заметили, что нам нужно изменить наш метод для выбора столбцов.
Читайте: Учебник по Python Pandas
- Выберите первые 5 столбцов и первые 5 строк с помощью iloc
df.iloc[:4, :4]
Пользовательский ИД | Пол | старшийгражданин | Партнер | |
0 | 7590-ВХВЭГ | Женский | 0 | да |
1 | 5575-ГНВДЭ | Мужчина | 0 | Нет |
2 | 3668-QPYBK | Мужчина | 0 | Нет |
3 | 7795-CFOCW | Мужчина | 0 | Нет |
Мы можем использовать iloc для выбора позиций с конца. Для этого нам просто нужно использовать отрицательные целые числа (-1, -2 и т. д.) и начать с них.
- Выберите последние 5 столбцов и последние 5 строк
df.iloc[-5:, -5:]
Безбумажный выставление счетов | Способ оплаты | Ежемесячные платежи | Всего начислений | Отток | |
7038 | да | Почтовый чек | 84,80 | 1990,5 | Нет |
7039 | да | Кредитная карта | 103.20 | 7362,9 | Нет |
7040 | да | Электронный чек | 29.60 | 346,45 | Нет |
7041 | да | Почтовый чек | 74,40 | 306,6 | да |
7042 | да | Банковский перевод | 105,65 | 6844,5 | Нет |
Вы также можете использовать лямбда-функцию с iloc. (Лямбда-функция — это небольшая анонимная функция в Python, которая может иметь одно выражение, но любое количество аргументов.)
- Выберите каждую третью строку до 15-й и покажите только столбцы «Интернет-сервис» и «Партнер».
df.iloc[ lambda x: (x.index x 3 == 0) & (x.index <= 150]['Партнер', 'InternetService' ]]
Партнер | Интернет услуги | |
0 | да | DSL |
3 | Нет | DSL |
6 | Нет | Оптоволокно |
9 | Нет | DSL |
12 | да | Оптоволокно |
15 | да | Оптоволокно |
Мы также можем выбрать метки или позиции между ними.
- Выберите позиции столбцов между 4 и 6 и позиции строк между 20 и 25
df.iloc[20:25, 4:6]
иждивенцы | пребывание в должности | |
20 | Нет | 1 |
21 | Нет | 12 |
22 | Нет | 1 |
23 | Нет | 58 |
24 | Нет | 49 |
Теперь, если вы попытаетесь передать метки iloc, Pandas покажет вам следующее сообщение об ошибке:
ValueError: индексирование на основе местоположения может иметь только типы [целое число, целочисленный фрагмент (точка НАЧАЛА ВКЛЮЧЕНА, точка КОНЕЦА ИСКЛЮЧЕНА), список целых чисел, логический массив]
Вы получите аналогичную ошибку, если передадите position в loc.
Читайте также: Вопросы для интервью с пандами
Узнайте больше о Python
Студент должен задавать вопросы и находить на них ответы. Мы надеемся, что эта статья ответила на ваши вопросы о loc в Pandas (или iloc в Python). Было бы лучше, если бы вы сами опробовали эти функции на разных наборах данных, чтобы понять, как они работают.
Если вы хотите узнать больше о Python, Pandas и соответствующих темах, посетите наш блог. Наши специалисты добавляют туда несколько подробных ресурсов.
Если вам интересно узнать о науке о данных, ознакомьтесь с программой IIIT-B & upGrad Executive PG по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1 -на-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.
Как мы можем добавить строки Pandas DataFrame?
Чтобы вставить строки в DataFrame, мы можем использовать команды loc, iloc и ix.
1. loc в основном используется для меток нашего индекса. Это можно понять, когда мы вставляем в loc 4, что указывает на то, что мы ищем записи DataFrame с индексом 4.
2. iloc в основном используется для поиска местоположений в индексе. Это как если бы мы вставляли в iloc 4, что указывает на то, что мы ищем записи DataFrame, которые присутствуют в индексе 4.
3. Случай ix сложен, потому что мы передаем метку ix, если индекс основан на целочисленных значениях. ix 4 указывает, что мы ищем в DataFrame значения с индексом 4.
Что такое переиндексация в контексте Pandas в Python?
Метки строк и столбцов DataFrame изменяются, когда мы переиндексируем его. Термин «переиндексация» относится к процессу выравнивания данных по определенному набору меток вдоль одной оси. В Pandas переиндексацию можно использовать для изменения индекса строк и столбцов DataFrame. Многие структуры данных индекса, связанные со многими сериями pandas или pandas DataFrame, могут использоваться с индексами.
Какие операции с данными выполняются в Pandas?
В Pandas есть несколько важных операций с данными для DataFrame, а именно:
1. Выбор строк и столбцов. Передавая имена строк и столбцов, мы можем выбрать любую строку и столбец в DataFrame. Он становится одномерным и рассматривается как серия, когда вы выбираете его из DataFrame.
2. Фильтрация данных. Используя некоторые логические выражения в DataFrame, мы можем фильтровать данные.
3. Нулевые значения. Если элементам не заданы данные, они получают нулевое значение. В разных столбцах не может быть значений, которые обычно представлены как NaN.