Pandas: Итерация по строкам DataFrame в Pandas
Last updated
Last updated
В этом учебнике вы узнаете, как использовать Python и Pandas для перебора строк в Pandas dataframe.
Руководство начнется с объяснения, почему итерация по строкам DataFrame в Pandas часто не нужна и медленнее, чем альтернативы, такие как векторизация. Тем не менее бывают случаи, когда вам необходимо итерировать строки DataFrame. Поэтому мы рассмотрим четыре разных метода, с помощью которых вы можете это сделать. Вы узнаете, как использовать методы Pandas .iterrows()
, .itertuples()
и .items()
. Вы также научитесь использовать циклы Python для перебора каждой строки в DataFrame Pandas.
Быстрый ответ: используйте Pandas .iterrows()
Оглавление
Pandas сам предупреждает о том, чтобы не итерировать строки датафреймов. Официальная документация указывает, что в большинстве случаев это действительно не требуется, и на датафреймах более 1,000 записей начнутся заметные замедления. Pandas рекомендует использовать векторизацию, если это возможно. Однако, если нужно применить конкретную формулу, использование метода .apply()
является привлекательной альтернативой.
Хотя итерация по строкам может показаться логичным инструментом для тех, кто привык работать с такими инструментами, как Excel, многие процессы можно реализовать гораздо лучше. Итерация по строкам, если это не необходимо, является плохой привычкой.
В порядке предпочтения, мой рекомендуемый подход заключается в следующем:
Векторизовать, если возможно
Используйте метод .apply()
, если вам нужно применить функцию, требующую информацию на уровне строки.
Перечисленные выше альтернативы гораздо более идиоматичны и легче для восприятия. Хотя использование метода .apply()
медленнее, чем векторизация, оно часто бывает проще для понимания начинающими.
Если вы хотите следовать примеру с тестовым датафреймом, можете скопировать код ниже. Мы загрузим небольшой датафрейм, чтобы можно было его полностью вывести. Вероятно, вы не столкнетесь с серьёзными проблемами производительности при работе с этим датафреймом, но они будут становиться всё более заметными по мере роста вашего набора данных.
Давайте начнем с загрузки данных и их вывода.
В следующем разделе вы узнаете, как векторизовать операции с данными, чтобы сэкономить память и время!
В этом разделе вы узнаете (хотя и очень кратко), как векторизовать операцию с данными.
В примере ниже вы узнаете, как возвести число в квадрат в столбце. Если бы вы перебирали каждую строку, вы бы выполнили вычисление столько раз, сколько записей в столбце. Однако при векторизации вы можете применить преобразование непосредственно к столбцу.
Давайте посмотрим, как выглядит векторизация с использованием кода:
Теперь, когда вы знаете, как применять векторизацию к данным, давайте изучим метод .iterrows()
в Pandas для итерации по строкам.
Давайте посмотрим, как работает метод .iterrows()
.
Как видно, приведённый выше метод генерирует кортеж, который мы можем распаковать. Первый элемент содержит индекс строки, а второй — серию Pandas, содержащую данные строки.
Метод .iterrows()
работает медленно, так как он должен создавать серию Pandas для каждой строки.
В следующем разделе вы узнаете, как использовать метод .itertuples()
для перебора строк в DataFrame Pandas.
Метод .itertuples()
- интересный метод, который, как и метод .iterrows()
, возвращает объект-генератор каждой строки в dataframe Pandas.
В отличие от предыдущего метода, метод .itertuples()
возвращает именованный кортеж
для каждой строки в датафрейме. Именованный кортеж похож на обычный кортеж, но каждый элемент имеет имя атрибута.
Давайте посмотрим, как это выглядит, распечатав каждый именованный кортеж, возвращаемый методом .itertuples()
:
Мы видим, что каждому элементу в кортеже присвоено имя атрибута. Мы можем получить доступ к элементам кортежа, вызывая его атрибут.
Давайте посмотрим, как можно вывести атрибут Year
каждой строки в Python:
В следующем разделе вы научитесь использовать метод .items()
для перебора элементов в датафрейме в Pandas.
Метод Pandas .items()
позволяет получить доступ к каждому элементу строки в Pandas. Он генерирует объекты-генераторы для каждого столбца и их элементов
Это, конечно, занимает еще больше времени, так как сначала нужно сгенерировать генератор не только для каждой строки, но и для каждого столбца.
Давайте посмотрим, как это выглядит:
В следующем разделе вы узнаете, как использовать цикл for в Python для перебора строк в датафрейме Pandas.
В этом заключительном разделе вы узнаете, как использовать цикл for в Python для перебора строк датафрейма Pandas.
Мы можем использовать аксессор Pandas .iloc
для доступа к различным строкам при выполнении цикла for.
Давайте посмотрим, как этот метод выглядит в Python
В этом учебном руководстве вы узнали о переборе строк в датафрейме Pandas. Вы начали с изучения причин, почему обход датафрейма построчно — плохая идея, и почему векторизация является гораздо лучшей альтернативой для большинства задач. Вы также узнали, как перебирать строки датафрейма Pandas, используя три различных метода датафрейма, а также цикл for с использованием индекса датафрейма.
Чтобы перебрать строки датафрейма Pandas, мы можем использовать метод .iterrows()
. Этот метод . Это означает, что каждое кортеж содержит индекс (из датафрейма) и значения строки. Важное замечание: .iterrows()
не сохраняет типы данных. Если вы хотите сохранить типы данных, обратите внимание на следующую секцию о .itertuples()
.
Чтобы узнать больше о методе Pandas .iterrows()
, ознакомьтесь .