دوال Series المفيدة
استخدم describe() وvalue_counts() وunique() وmap() لتلخيص Series وتحويلها بسرعة.
دوال Series المفيدة درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
تلخيص سريع باستخدام describe()
ينشئ s.describe() ملخصًا إحصائيًا باستدعاء واحد: العدد، والمتوسط، والانحراف المعياري، والحد الأدنى، والمئين الخامس والعشرون (Q1)، والوسيط (Q2)، والمئين الخامس والسبعون (Q3)، والحد الأقصى. أما مع Series النصية، فيعيد العدد، وعدد القيم الفريدة، والقيمة الأكثر تكرارًا، والتكرار. وهذه أسرع طريقة لتكوين فكرة عن توزيع عمود عند استكشاف مجموعة بيانات لأول مرة.
import pandas as pd
ages = pd.Series([25, 32, 19, 45, 28, 31, 22, 40])
print(ages.describe())
# count 8.000000
# mean 30.250000
# std 8.406...
# min 19.000000
# 25% 24.250000
# 50% 29.500000
# 75% 34.750000
# max 45.000000value_counts() لجداول التكرار
تعيد s.value_counts() Series جديدة تحتوي على القيم الفريدة بصفتها فهرسًا، وعدد مرات ظهورها بصفتها بيانات، مرتبةً تنازليًا حسب العدد. مرّر normalize=True للحصول على النسب بدلًا من الأعداد الخام. وهذه أول دالة يُنصح بتشغيلها على عمود فئوي لفهم توزيعه.
import pandas as pd
colors = pd.Series(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(colors.value_counts())
# red 3
# blue 2
# green 1
print(colors.value_counts(normalize=True).round(2))
# red 0.50 blue 0.33 green 0.17unique() وnunique()
تعيد s.unique() مصفوفة NumPy بالقيم المميزة مرتبةً حسب أول ظهور لها (بخلاف value_counts التي ترتب حسب التكرار). وتعُيد s.nunique() عدد القيم المميزة كعدد صحيح، أي تعددية العمود. وتتجاهل كلتاهما NaN افتراضيًا. استخدم nunique(dropna=False) لاحتساب NaN كقيمة مميزة.
import pandas as pd
s = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
print(s.unique()) # ['apple' 'banana' 'cherry']
print(s.nunique()) # 3map() للتحويل عنصرًا بعنصر
تطبق s.map() دالة أو قاموسًا أو Series أخرى على كل عنصر. عند تمرير قاموس، تُستبدل كل قيمة بالقيمة المقابلة لها في القاموس، بينما تصبح القيم غير الموجودة فيه NaN. وعند تمرير دالة، تُطبَّق على كل عنصر. وتناسب map إعادة ترميز التسميات الفئوية أو تطبيق جداول البحث.
import pandas as pd
grades = pd.Series(['A', 'B', 'C', 'A', 'B'])
gpa = {'A': 4.0, 'B': 3.0, 'C': 2.0}
print(grades.map(gpa))
# 0 4.0
# 1 3.0
# 2 2.0
# 3 4.0
# 4 3.0apply() للدوال المخصصة
تطبق s.apply(func) دالة Python قابلة للاستدعاء على كل عنصر، ثم تجمع النتائج. وبخلاف map()، صُممت للتعامل مع الدوال الأكثر تعقيدًا التي قد تعيد كائنات غير مفردة. أما للتحويلات البسيطة عنصرًا بعنصر، ففضّل map() أو تعبيرًا متجهًا؛ واستخدم apply() عندما يكون المنطق معقدًا جدًا بحيث يتعذر تحويله مباشرةً إلى عملية متجهة.
import pandas as pd
sentences = pd.Series(['Hello world', 'Pandas is great', 'Data science'])
word_counts = sentences.apply(lambda x: len(x.split()))
print(word_counts)
# 0 2
# 1 3
# 2 2sort_values() وsort_index()
تعيد s.sort_values() Series مرتبةً حسب قيم البيانات ترتيبًا تصاعديًا (مرّر ascending=False للترتيب التنازلي). أما s.sort_index() فترتب حسب تسميات الفهرس. ولا تعدّل أي منهما Series الأصلية افتراضيًا. مرّر inplace=True للتعديل مباشرةً (وهو أقل توصيةً في شيفرة Pandas الحديثة التي تسلسل العمليات).
import pandas as pd
s = pd.Series([30, 10, 50, 20], index=['d', 'a', 'c', 'b'])
print(s.sort_values())
# a 10
# b 20
# d 30
# c 50
print(s.sort_index())
# a 10
# b 20
# c 50
# d 30isin() لاختبار العضوية
تعيد s.isin(values) سلسلة منطقية تكون قيمتها True أينما كان العنصر موجودًا في القائمة أو المجموعة المُمرَّرة. وهذا أكثر قابلية للقراءة من استخدام شروط | متعددة، كما أنه أسرع بكثير مع المجموعات الكبيرة. ويُستخدم عادةً لتصفية الصفوف التي تنتمي إلى مجموعة معينة أو لوضع علامة على السجلات المطابقة لقائمة بحث.
import pandas as pd
countries = pd.Series(['DE', 'US', 'FR', 'UK', 'US', 'DE'])
nordics = ['DE', 'FR']
print(countries.isin(nordics))
# 0 True 1 False 2 True 3 False 4 False 5 True
print(countries[countries.isin(nordics)])between() لتصفية النطاقات
تعيد s.between(left, right, inclusive='both') سلسلة منطقية تكون قيمتها True عندما تقع القيمة ضمن النطاق [left, right]. ويكون الطرفان مشمولين افتراضيًا. وهذا أكثر اختصارًا من كتابة (s >= left) & (s <= right)، كما يوضح المقصود بجلاء. وتفيد هذه الدالة في تصفية النطاقات الرقمية، مثل فئات الأعمار أو شرائح الأسعار.
import pandas as pd
scores = pd.Series([45, 72, 83, 91, 55, 68])
pass_mask = scores.between(60, 100)
print(pass_mask)
# 0 False 1 True 2 True 3 True 4 False 5 True
print(scores[pass_mask].values) # [72 83 91 68]head() وtail() للفحص السريع
تعيد s.head(n) أول n عناصر (والقيمة الافتراضية 5)، بينما تعيد s.tail(n) آخر n عناصر. وتُستخدم هاتان الدالتان باستمرار عند استكشاف البيانات لإلقاء نظرة سريعة على بداية سلسلة طويلة ونهايتها دون طباعة آلاف الصفوف. وهما تعيدان Series جديدة (شريحة)، لذلك لا تُعدّلان الأصلية.
import pandas as pd
s = pd.Series(range(100))
print(s.head(3))
# 0 0
# 1 1
# 2 2
print(s.tail(3))
# 97 97
# 98 98
# 99 99rename() لتغيير الاسم
تعيد s.rename('new_name') Series جديدة تحمل قيمة مختلفة للسمة name. ولإعادة تسمية تسميات الفهرس، مرّر قاموسًا أو دالة: s.rename(index={'old': 'new'}). وتُعد إعادة التسمية مهمة قبل دمج Series في DataFrame، لأن name الخاصة بـ Series تصبح عنوان العمود. احرص دائمًا على إعادة التسمية بدلًا من إعادة إسناد القيم الخام.
import pandas as pd
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='original')
renamed = s.rename('updated').rename(index={'a': 'x', 'b': 'y', 'c': 'z'})
print(renamed)
# x 1
# y 2
# z 3
# Name: updatedidxmin() وidxmax()
تعيد s.idxmin() تسمية الفهرس للقيمة الدنيا، بينما تعيد s.idxmax() تسمية الفهرس للقيمة العظمى. وهذا أكثر فائدة من argmin/argmax عندما يحمل الفهرس تسميات ذات معنى، مثل التواريخ أو أسماء المنتجات؛ إذ تحصل على المعرّف الفعلي، لا على رقم الموضع فحسب.
import pandas as pd
scores = pd.Series({'Alice': 88, 'Bob': 73, 'Carol': 95, 'Dan': 60})
print('Best:', scores.idxmax(), scores.max()) # Carol 95
print('Worst:', scores.idxmin(), scores.min()) # Dan 60تحقق سريع
اختبر مدى فهمك لأساليب Series المفيدة التي تناولها هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس أن: describe() توفر ملخصًا إحصائيًا باستدعاء واحد، وvalue_counts() تنشئ جدول تكرارات للقيم الفريدة، وmap() تترجم القيم باستخدام dict، بينما تنفّذ apply() دالة مخصصة على كل عنصر. سنبدأ بعد ذلك العمل مع DataFrames، وهي الأداة الأساسية ثنائية الأبعاد لتحليل البيانات باستخدام Pandas.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «دوال Series المفيدة» مجاني؟
نعم — نص درس «دوال Series المفيدة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «دوال Series المفيدة»؟
استخدم describe() وvalue_counts() وunique() وmap() لتلخيص Series وتحويلها بسرعة. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «دوال Series المفيدة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء Series
- الوصول المستند إلى التسميات والمستند إلى المواضع
- العمليات المتجهة على Series
- دوال Series المفيدة