Une des façons de faire des calculs parallèles en Python est d'appliquer le dataframe Dask (un enseignant de Google m'a dit hier.) Dask peut être installé avec pip comme suit.
$ pip install dask
Maintenant, importez normalement comme ci-dessous, mais
import dask.dataframe as dd
J'ai une erreur comme celle-ci
ModuleNotFoundError: No module named 'toolz'
Alors
$ pip install toolz
Encore
ImportError: fsspec is required to use any file-system functionality.
Bien que pointu
$ pip install fsspec
Maintenant qu'il est enfin prêt à être utilisé, passons au sujet principal.
J'ai converti le pandas DataFrame en un dataframe Dask, puis j'ai essayé d'appliquer une fonction sans valeur de retour à la ligne comme ceci:
import pandas as pd
import dask.dataframe as dd
#Une fonction qui sort la somme des valeurs des colonnes A et B vers la sortie standard
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')
Si vous l'exécutez avec cela, vous obtiendrez l'avertissement suivant.
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.
Apparemment, vous devez spécifier quel type de données la fonction donnée à .apply ()
renvoie dans l'argument meta
. Mais il n'y a pas de valeur de retour ... C ++ Si vous faites void
Je n'écris pas de python ...
J'ai vérifié! C'est `` Aucun ''!
import pandas as pd
import dask.dataframe as dd
#Une fonction qui sort la somme des valeurs des colonnes A et B vers la sortie standard
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'
Voilà la solution! Je l'ai écrit pendant longtemps, mais c'est tout!
Recommended Posts