Pandas & NumPy Academy · درس

العمليات المتجهة على Series

أجرِ عمليات حسابية بين سلسلتين، وتعامل تلقائيًا مع محاذاة الفهارس، واملأ القيم المفقودة بعد المحاذاة بـ NaN.

الدرس 3 من 413 خطوة

العمليات المتجهة على Series درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

لماذا نستخدم العمليات المتجهة؟

مثل NumPy، تدعم Pandas Series العمليات المتجهة التي تطبق العمليات الحسابية والمقارنات والدوال على كل عنصر دون استخدام حلقات Python. ويوفر ذلك الإيجاز والسرعة معًا. في الخلفية، تفوّض كل عملية إلى إجراءات NumPy المنفذة على مستوى C، لكن Pandas تضيف ميزة مهمة: المحاذاة التلقائية للفهرس قبل تنفيذ العملية.

import pandas as pd

revenue = pd.Series([1000, 2000, 1500], index=['Jan', 'Feb', 'Mar'])
tax_rate = 0.2
net = revenue * (1 - tax_rate)   # vectorized -- no loop
print(net)

العمليات الحسابية بين Series

عند جمع Series أو طرحها أو ضربها أو قسمتها، يقوم Pandas أولًا بمحاذاتها حسب تسمية الفهرس. ولا تنتج قيمة إلا للمواضع التي تحمل فيها كلتا Series التسمية نفسها؛ أما التسميات غير المتطابقة فتنتج NaN. ويمنع هذا السلوك الأخطاء الخفية الناتجة عن عدم محاذاة البيانات، مثل جمع أرقام شهر يناير من مصدرين للبيانات مخزنة بترتيبين مختلفين.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

print(a + b)
# w     NaN
# x     NaN
# y    21.0
# z    32.0

ملء NaN في العمليات ذات المحاذاة

لتجنب انتشار NaN في العمليات التي لا تتطابق فيها الفهارس، استخدم الدوال الحسابية مثل .add() و.sub() و.mul() و.div() مع المعامل fill_value=. إذ يستبدل هذا المعامل قيمةً محددة بأي تسمية مفقودة في إحدى Series قبل تنفيذ العملية، وتكون القيمة الشائعة 0 للجمع و1 للضرب.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

result = a.add(b, fill_value=0)
print(result)
# w     3.0
# x    10.0
# y    21.0
# z    32.0

الحساب القياسي على Series

يطبق إجراء حسابي باستخدام قيمة قياسية على كل عنصر، وينتج Series جديدة بالفهرس نفسه. وهذه أبسط صور العمليات المتجهة: s + 5 وs * 100 وs ** 2. ولا ينتج عن الحساب القياسي قيم NaN، ويُستخدم لتحويل الوحدات والتطبيع وإضافة إزاحة إلى السلاسل الزمنية.

import pandas as pd

prices_eur = pd.Series([1.0, 2.5, 4.0], index=['a', 'b', 'c'])
exchange = 1.08
prices_usd = prices_eur * exchange
print(prices_usd.round(2))
# a    1.08
# b    2.70
# c    4.32

تطبيق ufuncs الخاصة بـ NumPy على Series

تعمل ufuncs الخاصة بـ NumPy بسلاسة على Pandas Series وتعيد Series بالفهرس نفسه. وهذا يعني أنه يمكنك استدعاء np.sqrt(s) أو np.log1p(s) أو np.exp(s) مباشرةً على Series دون تحويلها أولًا إلى مصفوفة. وتكون النتيجة Series جديدة تحافظ على التسميات الأصلية.

import pandas as pd
import numpy as np

s = pd.Series([0, 1, 4, 9, 16], index=list('abcde'))
print(np.sqrt(s))
# a    0.0
# b    1.0
# c    2.0
# d    3.0
# e    4.0

عمليات المقارنة على Series

تعيد معاملات المقارنة (== و!= و> و< و>= و<=) Series منطقية عنصرًا بعنصر. وتُعد هذه المعاملات أساس التصفية؛ إذ تمرّر Series المنطقية إلى .loc لاختيار الصفوف المطابقة. كما يحاذي Pandas الفهرس عند مقارنة Series اثنتين.

import pandas as pd

s = pd.Series([3, 7, 2, 9, 1], index=list('abcde'))
print(s > 4)
# a    False
# b     True
# c    False
# d     True
# e    False
print(s[s > 4])  # b:7  d:9

تسلسل العمليات المتجهة

بما أن كل عملية تعيد Series جديدة، يمكنك تسلسل عدة تحويلات في تعبير واحد. ويجعل ذلك الشيفرة سهلة القراءة، كما يتجنب إنشاء متغيرات وسيطة غير ضرورية. وفي مسارات المعالجة المعقدة، قسّم التسلسل على عدة أسطر باستخدام الأقواس. ويُعد التسلسل في Pandas مكافئًا للبرمجة الوظيفية باستخدام بيانات غير قابلة للتغيير.

import pandas as pd
import numpy as np

raw_scores = pd.Series([55, 80, 45, 90, 72])
normalised = (raw_scores - raw_scores.min()) / (raw_scores.max() - raw_scores.min())
print(normalised.round(2))
# 0    0.22
# 1    0.78
# 2    0.00
# 3    1.00
# 4    0.60

معالجة NaN في العمليات المتجهة

تنتشر NaN؛ فأي عملية حسابية تتضمن NaN تنتج NaN. استخدم s.fillna(value) للاستبدال قبل إجراء العملية، أو استخدم المعامل skipna=True في دوال التجميع. تعيد الدالة pd.isna(s) Series منطقية تحدد مواضع NaN؛ استخدمها لمراجعة البيانات قبل حساب الإحصاءات.

import pandas as pd
import numpy as np

s = pd.Series([1.0, np.nan, 3.0, np.nan, 5.0])
print(s + 10)
# 0    11.0  2    13.0  4    15.0 -- NaN stays NaN

print(s.fillna(0) + 10)
# 0    11.0  1    10.0  2    13.0  3    10.0  4    15.0

abs() وclip() وround() على Series

توفّر Pandas Series العديد من الدوال المشابهة لدوال NumPy مباشرةً: إذ تعيد s.abs() وs.clip(lower, upper) وs.round(decimals) Series جديدة بعد تطبيق التحويل على كل عنصر. وهذه الدوال مكافئة لاستدعاءات ufunc في NumPy، لكنها تستخدم صيغة الدوال وتحافظ على فهرس Series واسمها.

import pandas as pd

s = pd.Series([-2.5, 1.3, -0.7, 4.9, -3.1])
print(s.abs())          # [2.5 1.3 0.7 4.9 3.1]
print(s.clip(-2, 2))    # [-2.  1.3 -0.7  2. -2. ]
print(s.round(0))       # [-2.  1.  -1.   5.  -3.]

pct_change() لمعدلات النمو

تحسب s.pct_change() التغير النسبي بين العناصر المتتالية: (الحالي - السابق) / السابق. ويكون العنصر الأول NaN لعدم وجود قيمة سابقة. وهذه هي العملية القياسية لحساب معدلات النمو من شهر إلى شهر، والعوائد اليومية في مجال التمويل، وميزات معدل التغير لنماذج السلاسل الزمنية.

import pandas as pd

monthly_revenue = pd.Series([100, 120, 110, 140],
                            index=['Q1', 'Q2', 'Q3', 'Q4'])
growth = monthly_revenue.pct_change()
print(growth.round(3))
# Q1      NaN
# Q2    0.200
# Q3   -0.083
# Q4    0.273

cumsum() وcumprod() على Series

تعيد s.cumsum() Series من المجاميع التراكمية، بينما تعيد s.cumprod() النواتج التراكمية. وتُستخدمان لحساب الإيرادات التراكمية، وعوائد الاستثمارات المركبة، أو أعداد الكلمات المتراكمة. وتحافظان على تسميات الفهرس الأصلية، مما يسهّل رسم Series التراكمية عبر الزمن أو حسب الفئة.

import pandas as pd

daily_sales = pd.Series([100, 150, 80, 200],
                        index=['Mon', 'Tue', 'Wed', 'Thu'])
print(daily_sales.cumsum())
# Mon    100
# Tue    250
# Wed    330
# Thu    530

تحقق سريع

اختبر مدى فهمك للعمليات المتجهة على Series من هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن: المعاملات الحسابية تُطبَّق عنصرًا بعنصر على Series دون حلقات، وأن Pandas يحاذي Series اثنتين تلقائيًا حسب تسمية الفهرس قبل إجراء العملية، ويضع NaN في المواضع غير المتطابقة، وأن دوال مثل fill_value وpct_change وcumsum توسّع إمكانات العمليات المتجهة للمهام التحليلية. سنستكشف بعد ذلك دوال Series المفيدة مثل describe وvalue_counts وmap لإجراء التلخيص بسرعة.

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «العمليات المتجهة على Series» مجاني؟

نعم — نص درس «العمليات المتجهة على Series» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «العمليات المتجهة على Series»؟

أجرِ عمليات حسابية بين سلسلتين، وتعامل تلقائيًا مع محاذاة الفهارس، واملأ القيم المفقودة بعد المحاذاة بـ NaN. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «العمليات المتجهة على Series»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء Series
  2. الوصول المستند إلى التسميات والمستند إلى المواضع
  3. العمليات المتجهة على Series
  4. دوال Series المفيدة
← العودة إلى Pandas & NumPy Academy