pandas gelten multiprocessing
Ich versuche, multiprocessing mit pandas dataframe, ist split der dataframe zu 8 Teile. wendet eine Funktion auf jedes Teil mit apply (mit jedem Teil verarbeitet in verschiedenen Verfahren).
BEARBEITEN:
Hier ist die Lösung, die ich schließlich gefunden:
import multiprocessing as mp
import pandas.util.testing as pdt
def process_apply(x):
# do some stuff to data here
def process(df):
res = df.apply(process_apply, axis=1)
return res
if __name__ == '__main__':
p = mp.Pool(processes=8)
split_dfs = np.array_split(big_df,8)
pool_results = p.map(aoi_proc, split_dfs)
p.close()
p.join()
# merging parts processed by different processes
parts = pd.concat(pool_results, axis=0)
# merging newly calculated parts to big_df
big_df = pd.concat([big_df, parts], axis=1)
# checking if the dfs were merged correctly
pdt.assert_series_equal(parts['id'], big_df['id'])
- es ist ein Raum in der
res = df.apply(process apply, axis=1)
, ist das richtig? - was Sie genau zu erreichen versucht, indem dieser code?
- derzeit gelten nur gesättigte Fettsäuren einen Kern der CPU. Ich will Multiprozess-und nutzen alle Kerne zu verringern Bearbeitungszeit
- danke für den Hinweis, aber das ist nur ein Tippfehler im post
- Es wäre schöner, wenn man die Frage allein und setzen Sie dann die Antworten in den Antworten. So können wir sehen, mehr von dem Prozess, ohne Blick auf das changelog.
- sollte "aoi_proc" sein "Prozess"? Vielleicht ist die Umbenennung der "Prozess" - Funktion, um einfach "f" wäre besser lesbar in der multiprocessing-Kontext
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer allgemeineren version, basierend auf der Autor-Lösung, die es erlaubt, führen Sie es auf jede Funktion und dataframe:
Also die folgende Zeile:
Werden:
Da habe ich nicht viel von Ihrer Daten-Skript, dies ist eine Vermutung, aber ich würde vorschlagen, mit
p.map
stattapply_async
mit dem Rückruf.dask
stackoverflow.com/questions/37979167/...Können Sie https://github.com/nalepae/pandarallel, wie im folgenden Beispiel:
Ich auch das gleiche problem, wenn ich
multiprocessing.map()
zu bewerben-Funktion zu anderen chunk von einem großen dataframe.Ich möchte nur hinzufügen mehrere Punkte, nur für den Fall, andere Menschen laufen in das gleiche problem wie ich.
if __name__ == '__main__':
.py
- Datei, wenn Sieipython/jupyter notebook
, dann können Sie nicht laufenmultiprocessing
(das gilt für meinen Fall, obwohl ich keine Ahnung habe)Dies funktionierte gut für mich: