ربما كنت قد واجهت مهمة الحوسبة المتوازية على dataframes الباندا. يمكن حل هذه المشكلة عن طريق بايثون الأصلية ، وبمساعدة مكتبة رائعة - متوازية. في هذه المقالة سأوضح كيف تسمح لك هذه المكتبة بمعالجة بياناتك باستخدام جميع القدرات المتاحة.
![](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 صف وعمود واحد.
df = pd.DataFrame(
[i for i in range(100)],
columns=["sample_column"]
)
![](https://habrastorage.org/webt/un/6t/-k/un6t-kqn9o_fs3bmfydzv7ivysg.png)
مثال على مهمة مناسبة للتوازي
كما نعلم ، يمكن موازاة حل جميع المشاكل. مثال بسيط على مهمة مناسبة هو استدعاء مصدر خارجي ، مثل 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)
! — .