As iterrows de pandas têm problemas de desempenho?

| | | | | | | |

Percebi um desempenho muito ruim ao usar iterrows de pandas.

Isso é algo que outras pessoas experimentam? É específico para iterrows e essa função deve ser evitada para dados de um determinado tamanho (estou trabalhando com 2-3 milhões de linhas)?

Esta discussão no GitHub me levou a acreditar que é causado ao misturar dtypes no dataframe, no entanto, o exemplo simples abaixo mostra que existe mesmo ao usar um dtype (float64). Isso leva 36 segundos na minha máquina:

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 for rowindex, row in dfa.iterrows(): i+=1 end = time.time() print end - start 

Por que as operações vetorizadas como apply são muito mais rápidas? Imagino que deve haver alguma iteração linha por linha acontecendo lá também.

Não consigo descobrir como para não usar iterrows no meu caso (isso vou guardar para uma pergunta futura). Portanto, eu gostaria de ouvir se você conseguiu evitar essa iteração consistentemente. Estou fazendo cálculos com base em dados em dataframes separados. Obrigado!

---Edit: versão simplificada do que eu quero executar foi adicionada abaixo---

import pandas as pd import numpy as np #%% Crie as tabelas originais t1 = {"letter":["a","b"], "number1":[50,-10]} t2 = {"letter ":["a","a","b","b"], "número2":[0.2,0.5,0.1,0.4]} tabela1 = pd.DataFrame(t1) tabela2 = pd.DataFrame(t2) #%% Cria o corpo da nova tabela table3 = pd.DataFrame(np.nan, columns=["letter","number2"], index=[0]) #%% Iterar através da filtragem de dados relevantes, otimização, retorno info para row_index, linha em table1.iterrows(): t2info = table2[table2.letter == row["letter"]].reset_index() table3.ix[row_index,] = optimize(t2info,row["number1"] ) #%% Definir otimização def optimize(t2info, t1info): cálculo = [] para índice, r em t2info.iterrows(): cálculo.append(r["number2"]*t1info) maxrow = cálculo.index(max( cálculo)) return 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