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.
![](https://habrastorage.org/webt/4j/jc/rq/4jjcrqglilurbxjfesu7znvwjws.gif)
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"]
)
![](https://habrastorage.org/webt/un/6t/-k/un6t-kqn9o_fs3bmfydzv7ivysg.png)
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.
![](https://habrastorage.org/webt/6a/3a/ej/6a3aejypmvouogjmhcd3i--kgde.gif)
"" 35 .
, parallel_apply:
df["sample-word"] = df.sample_column.parallel_apply(function_to_apply)
![](https://habrastorage.org/webt/4j/jc/rq/4jjcrqglilurbxjfesu7znvwjws.gif)
5 .
pandas , pandarallel, Github .
![](https://habrastorage.org/webt/14/rx/cd/14rxcddfc9lms2sdubj9h7zgykm.png)
! — .