Есть ли у pandas iterrows проблемы с производительностью?

| | | | | | | |

Я заметил очень низкую производительность при использовании iterrows от pandas.

Это то, с чем сталкиваются другие? Является ли это специфичным для iterrows и следует ли избегать этой функции для данных определенного размера (я работаю с 2-3 миллионами строк)?

Это обсуждение на GitHub заставило меня поверить, что это вызвано смешиванием dtypes в фрейме данных, однако простой пример ниже показывает, что это происходит даже при использовании одного dtype (float64). Это на моей машине занимает 36 секунд:

import pandas as pd import numpy as np import time s1 = np.random.randn(2000000) s2 = np.random.randn(2000000) dfa = pd .DataFrame({"s1": s1, "s2": s2}) start = time.time() i=0 для rowindex, строка в dfa.iterrows(): i+=1 end = time.time() конец печати - start 

Почему векторизованные операции, такие как apply, выполняются намного быстрее? Я полагаю, что там тоже должна происходить построчная итерация.

Я не могу понять, как не использовать iterrows в моем случае (это я сохраню для будущего вопроса). Поэтому я был бы признателен, если бы вы постоянно избегали этой итерации. Я делаю расчеты на основе данных в отдельных фреймах данных. Спасибо!

---Редактировать: упрощенная версия того, что я хочу запустить, добавлена ниже---

< код>импортировать панд как pd импортировать numpy как np #%% Создать исходные таблицы t1 = {"letter":["a","b"], "number1":[50,-10]} t2 = {"letter ":["a","a","b","b"], "number2":[0.2,0.5,0.1,0.4]} table1 = pd.DataFrame(t1) table2 = pd.DataFrame(t2) #%% Создать тело новой таблицы table3 = pd.DataFrame(np.nan, columns=["letter","number2"], index=[0]) #%% Повторить фильтрацию релевантных данных, оптимизацию, возврат информация для row_index, строка в table1.iterrows(): t2info = table2[table2.letter == row["letter"]].reset_index() table3.ix[row_index,] = optimise(t2info,row["number1"] ) #%% Определить оптимизацию def optimise(t2info, t1info): вычисление = [] для индекса, r в t2info.iterrows(): calculate.append(r["number2"]*t1info) maxrow = calculate.index(max( расчет)) вернуть t2info.ix[maxrow] 

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method