Язык программирования Python

Как выполнять итерации по строкам DataFrame в Pandas, Python.

Итерация по строкам фрейма данных – довольно распространенная операция. Поэтому существуют различные способы сделать это. В этом случае мы рассмотрим три наиболее используемых метода и сравним их эффективность.

Пример набора данных

Для работы мы будем использовать набор синтетических данных о клиентах.

import pandas as pd users = {'first_name': ['Иван', 'Сергей', 'Василий', 'Елена', 'Мария', 'Ольга'], 'last_name': ['Иванов', 'Петров', 'Сидоров', 'Иванова', 'Петрова', 'Сидорова'], 'age': [27, 41, 29, 29, 21, 33], 'gender': ['Male', 'Female', 'Female', 'Male', 'Male', 'Female']} df = pd.DataFrame(users)
Code language: JavaScript (javascript)

Итерация элементов с помощью функции for

Стандартным способом итерации в Python является использование for для диапазона.

В случае с DataFrame вы можете выполнять итерации по длине DataFrame, используя iloc для доступа к i-й строке объекта в каждой итерации.

Это можно увидеть на следующем примере.

for i in range(len(df)): print(df.iloc[i]['first_name'])
Code language: CSS (css)
Иван Сергей Василий Елена Мария Ольга

В этом случае в каждой из итераций выбирается имя клиента и выводится на экран.

Итерация по элементам iterrows

Это свойство во всех DataFrames возвращает итерируемый объект, который можно использовать в цикле for.

Содержимое в каждой итерации представляет собой кортеж с индексом и ряд с содержимым строки.

Таким образом, чтобы воспроизвести результаты приведенного выше примера, вам придется сделать что-то вроде следующего.

for index, row in df.iterrows(): print(row['first_name'])
Code language: CSS (css)

Обратите внимание, что наиболее практично распаковывать кортеж, чтобы индекс был в одной переменной, а ряд – в другой.

Итерация по элементам itertuples

Еще один метод DataFame Pandas, который возвращает итерируемый объект, – itertuples.

Разница между этим и предыдущим способом заключается в том, что результатом является именованный кортеж (namedtuples), где каждый из элементов помечен именем столбцов.

Таким образом, вы можете воспроизвести пример, рассмотренный в предыдущих разделах, с помощью следующего кода.

for row in df.itertuples(): print(row.first_name)
Code language: CSS (css)

Если вам нужно получить индекс строки, по которой вы выполняете итерацию, значение находится в кортеже с именем Index.

Сравнение производительности

При работе с небольшими DataFrames, около тысячи строк, мы можем использовать метод, который нам наиболее удобен, так как разница в вычислениях не будет заметна.

Но когда речь идет о миллионах элементов, это не так.

import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(1000000, 2)), columns=list('AB')) for i in range(len(df)): # 51.4 мс pass for index, row in df.iterrows(): # 48 с pass for index, row in df.iterrows(): # 544 мс pass
Code language: PHP (php)

Получены следующие результаты

ИтерацияВремя (мс)
for51,4
iterrows48.000
iterrows544
Используемый метод и время, необходимое для итерации по DataFrame с одним миллионом строк.

Заключение

На этот раз мы рассмотрели различные методы итерации строк фрейма данных в Pandas.

Эти методы могут быть более подходящими в зависимости от того, что вы хотите делать с данными в каждый конкретный момент времени.

Однако мы также видели, что для DataFrames с сотнями тысяч или миллионами записей самым быстрым методом является итерация по диапазону с помощью for.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *