Eine der Möglichkeiten, parallele Berechnungen in Python durchzuführen, ist das Anwenden des Dask-Datenrahmens. (Der Google-Lehrer hat es mir gestern mitgeteilt.) Dask kann wie folgt mit pip installiert werden.
$ pip install dask
Jetzt normal wie unten importieren, aber
import dask.dataframe as dd
Ich habe so einen Fehler bekommen
ModuleNotFoundError: No module named 'toolz'
Damit
$ pip install toolz
Immer noch
ImportError: fsspec is required to use any file-system functionality.
Während scharf
$ pip install fsspec
Nun, da es endlich einsatzbereit ist, gehen wir zum Hauptthema über.
Ich habe den Pandas DataFrame in einen Dask-Datenrahmen konvertiert und dann versucht, eine Funktion ohne Rückgabewert auf die folgende Zeile anzuwenden:
import pandas as pd
import dask.dataframe as dd
#Eine Funktion, die die Summe der Werte in den Spalten A und B an die Standardausgabe ausgibt
def print_sum(pd_series):
print(pd_series['A'] + pd_series['B'])
A = pd.DataFrame({'A': [1.0, 1.5, 2.0 ], 'B': [5.0, 2.0, 1.2]},index = [1,2,3])
A_dd = dd.from_pandas(A, npartitions=2)
A_dd.apply(print_sum, axis = 1).compute(scheduler='processes')
Wenn Sie es damit ausführen, erhalten Sie die folgende Warnung.
You did not provide metadata, so Dask is running your function on a small dataset to guess output types. It is possible that Dask will guess incorrectly.
To provide an explicit output types or to silence this message, please provide the `meta=` keyword, as described in the map or apply function that you are using.
Anscheinend müssen Sie angeben, welche Art von Datentyp die Funktion ".apply ()" im Argument "meta" zurückgibt. Es gibt jedoch keinen Rückgabewert ... C ++ Wenn Sie "void" ausführen Ich schreibe keine Python ...
Ich überprüfte! Es ist "Keine"!
import pandas as pd
import dask.dataframe as dd
#Eine Funktion, die die Summe der Werte in den Spalten A und B an die Standardausgabe ausgibt
def print_sum(pd_series):
print(pd_series['A'] + pd_series['B'])
A = pd.DataFrame({'A': [1.0, 1.5, 2.0 ], 'B': [5.0, 2.0, 1.2]},index = [1,2,3])
A_dd = dd.from_pandas(A, npartitions=2)
A_dd.apply(print_sum, axis = 1, meta = 'None').compute(scheduler='processes') # meta = 'None'
Das ist die Lösung! Ich habe es lange geschrieben, aber das war's!