Почему итерты Pandas работают медленнее, чем итерации в кадрах данных с большим количеством (> 100) столбцов?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему итерты Pandas работают медленнее, чем итерации в кадрах данных с большим количеством (> 100) столбцов?

Сообщение Anonymous »

В неудачной ситуации, когда цикл по строкам фрейма данных Pandas является единственным способом продолжить, обычно упоминается, что itertuples() предпочтительнее iterrows() с точки зрения скорости вычислений. Это утверждение справедливо для фреймов данных с небольшим количеством столбцов («узкие фреймы данных»), но, похоже, не относится к широким фреймам данных с сотнями столбцов.
Это нормально? Разве itertuples не должны вести себя как iterrows с точки зрения масштабирования с учетом номера столбца, т.е. постоянного времени, а не линейного времени?
Ниже прикреплен фрагмент кода, показывающий переход от itertuples() к iterrows() был самым быстрым способом выполнения итерации при увеличении ширины кадра данных.

Код: Выделить всё

import pandas as pd
import time
from pylab import *
size_range = [100, 300, 600, 1200]
nrows = 100000
compute_time_rows = zeros(len(size_range))
compute_time_tuples = zeros(len(size_range))

for s, size in enumerate(size_range):
x = pd.DataFrame(randn(nrows, size))
start = time.time()
for idx, row in x.iterrows(): z = sum(row)
stop = time.time()
compute_time_rows[s] = stop - start
start = time.time()
for row in x.itertuples(index=False): z = sum(row)
stop = time.time()
compute_time_tuples[s] = stop - start

xlabel('Dataframe width')
ylabel('Computation time [s]')
pd.Series(compute_time_rows, index=size_range).plot(grid=True, label='iterrows')
pd.Series(compute_time_tuples, index=size_range).plot(grid=True, label='itertuples')
title(f'Iteration over a {nrows} rows Pandas dataframe')
legend()
[Скорость итерации строк в зависимости от ширины кадра данных]
https://i.sstatic.net/65QuPfjB.png

Подробнее здесь: https://stackoverflow.com/questions/791 ... ny-100-col
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»