Adicionando computação paralela ao Pandas

Talvez você tenha enfrentado a tarefa de computação paralela em quadros de dados de pandas. Este problema pode ser resolvido pelo Python nativo e com a ajuda de uma biblioteca maravilhosa - paralela. Neste artigo, mostrarei como essa biblioteca permite processar seus dados usando todas as capacidades disponíveis.



A biblioteca permite que você não pense no número de encadeamentos, criando processos e fornece uma interface interativa para monitorar o progresso.


Instalação


pip install pandas jupyter pandarallel requests tqdm

Como você pode ver, eu também instalo o tqdm. Com isso, demonstrarei claramente a diferença na velocidade de execução do código em uma abordagem sequencial e paralela.


Costumização


import pandas as pd
import requests

from tqdm import tqdm
tqdm.pandas()

from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)

Você pode encontrar a lista completa de configurações na documentação paralela.


Crie um quadro de dados


Para experimentos, crie um quadro de dados simples - 100 linhas, 1 coluna.


df = pd.DataFrame(
    [i for i in range(100)],
    columns=["sample_column"]
)


Exemplo de uma tarefa adequada para paralelização


Como sabemos, a solução de nem todos os problemas pode ser paralela. Um exemplo simples de uma tarefa adequada é chamar alguma fonte externa, como uma API ou banco de dados. Na função abaixo, eu chamo uma API que me retorna uma palavra aleatória. Meu objetivo é adicionar uma coluna com palavras derivadas dessa API ao quadro de dados.


def function_to_apply(i):
    r = requests.get(f'https://random-word-api.herokuapp.com/word').json()

    return r[0]


df["sample-word"] = df.sample_column.progress_apply(function_to_apply)

, tqdm, — progress_apply apply. , , progress bar.



"" 35 .



, parallel_apply:


df["sample-word"] = df.sample_column.parallel_apply(function_to_apply)


5 .



pandas , pandarallel, Github .



! — .


All Articles