Czy pandy iterrows mają problemy z wydajnością?

| | | | | | | |

Zauważyłem bardzo słabą wydajność podczas korzystania z iterrow od pand.

Czy jest to coś, czego doświadczają inni? Czy jest to specyficzne dla iterrows i czy należy unikać tej funkcji w przypadku danych o określonym rozmiarze (pracuję z 2-3 milionami wierszy)?

Ta dyskusja na GitHubie doprowadziła mnie do wniosku, że jest to spowodowane mieszaniem dtypes w ramce danych, jednak prosty przykład poniżej pokazuje, że istnieje nawet przy użyciu jednego dtype (float64). zajmuje 36 sekund na moim komputerze:

importuj pandy jako pd importuj numpy jako np czas importu s1 = np.random.randn(2000000) s2 = np.random.randn(2000000) dfa = pd .DataFrame({"s1": s1, "s2": s2}) start = time.time() i=0 dla rowindex, wiersz w dfa.iterrows(): i+=1 end = time.time() print end - start 

Dlaczego operacje wektorowe, takie jak zastosowanie, są o wiele szybsze? Wyobrażam sobie, że musi tam również odbywać się iteracja wiersz po wierszu.

Nie mogę zrozumieć, jak nie używać iterrows w moim przypadku (to zachowam na przyszłe pytanie). Dlatego byłbym wdzięczny za wysłuchanie, jeśli konsekwentnie udało Ci się uniknąć tej iteracji. Dokonuję obliczeń na podstawie danych w oddzielnych ramkach danych. Dziękuję!

---Edytuj: poniżej dodano uproszczoną wersję tego, co chcę uruchomić---

< kod>import pandy jako pd import numpy jako np #%% Utwórz oryginalne tabele 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) #%% Utwórz treść nowej tabeli table3 = pd.DataFrame(np.nan, columns=["letter","number2"], index=[0]) #%% Iteruj przez filtrowanie odpowiednich danych, optymalizację, zwracanie informacje o row_index, wiersz w table1.iterrows(): t2info = table2[table2.letter == row["letter"]].reset_index() table3.ix[row_index,] =optim(t2info,row["liczba1"] ) #%% Zdefiniuj optymalizację def optymaliz(t2info, t1info): kalkulacja = [] dla indeksu, r in t2info.iterrows(): kalkulacja.append(r["liczba2"]*t1info) maxrow = kalkulacja.index(max( obliczenie)) 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