也许您已经面临着在熊猫数据帧上进行并行计算的任务。这个问题既可以通过本机Python来解决,也可以借助一个出色的库pandarallel来解决。在本文中,我将展示该库如何允许您使用所有可用容量来处理数据。
![](https://habrastorage.org/webt/4j/jc/rq/4jjcrqglilurbxjfesu7znvwjws.gif)
该库使您不必考虑线程数,创建进程,并提供了用于监视进度的交互式界面。
安装
pip install pandas jupyter pandarallel requests tqdm
如您所见,我还安装了tqdm。借助它,我将清楚地证明顺序和并行方法在代码执行速度上的差异。
客制化
import pandas as pd
import requests
from tqdm import tqdm
tqdm.pandas()
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
您可以在pandarallel文档中找到设置的完整列表。
创建一个数据框
为了进行实验,请创建一个简单的数据框-100行1列。
df = pd.DataFrame(
[i for i in range(100)],
columns=["sample_column"]
)
![](https://habrastorage.org/webt/un/6t/-k/un6t-kqn9o_fs3bmfydzv7ivysg.png)
适用于并行化的任务示例
众所周知,并非所有问题的解决方案都可以并行化。合适的任务的一个简单示例是调用某些外部源,例如API或数据库。在下面的函数中,我调用了一个API,该API向我返回了一个随机单词。我的目标是在数据框中添加一列,其中包含从此API派生的单词。
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)
! — .