Hat pandas iterrows Leistungsprobleme?

| | | | | | | |

Ich habe eine sehr schlechte Leistung bei der Verwendung von iterrows von Pandas festgestellt.

Ist das etwas, was andere erfahren? Ist es spezifisch für iterrows und sollte diese Funktion für Daten einer bestimmten Größe vermieden werden (ich arbeite mit 2-3 Millionen Zeilen)?

Diese Diskussion auf GitHub führte mich zu der Annahme, dass dies durch das Mischen von dtypes im Datenrahmen verursacht wird, aber das einfache Beispiel unten zeigt, dass es auch bei Verwendung eines dtype (float64) vorhanden ist. Dies dauert 36 Sekunden auf meinem Rechner:

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

Warum sind vektorisierte Operationen wie apply so viel schneller?Ich kann mir vorstellen, dass dort auch eine zeilenweise Iteration vor sich geht.

Ich kann mir nicht erklären wie in meinem Fall keine Iterrows zu verwenden (dies werde ich für eine zukünftige Frage aufheben). Daher würde ich mich freuen, wenn Sie diese Iteration konsequent vermeiden konnten. Ich mache Berechnungen basierend auf Daten in separaten Datenrahmen. Vielen Dank!

---Bearbeiten: Eine vereinfachte Version dessen, was ich ausführen möchte, wurde unten hinzugefügt---

import pandas as pd import numpy as np #%% Erstelle die Originaltabellen 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) #%% Erstellen Sie den Hauptteil der neuen Tabelle table3 = pd.DataFrame(np.nan, column=["letter","number2"], index=[0]) #%% Iterieren Sie durch das Filtern relevanter Daten, Optimieren, Zurückgeben info für row_index, row in table1.iterrows(): t2info = table2[table2.letter == row["letter"]].reset_index() table3.ix[row_index,] = optimize(t2info,row["number1"] ) #%% Optimierung definieren def optimize(t2info, t1info): Berechnung = [] für Index, r in t2info.iterrows(): Berechnung.append(r["number2"]*t1info) maxrow = Berechnung.index(max( Berechnung)) gibt t2info.ix[maxrow] 
zurück

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