Pandas: التعرف على المسلسلات

آخر تحديث: 2026-08-26

تُعدّ السلسلة (Series) هي بنية البيانات الأكثر أساسية في مكتبة Pandas — يمكن تخيّلها على أنها "مصفوفة أحادية البُعد مُعَلَّمة". تتكون السلسلة من جزأين: البيانات (مصفوفة NumPy من النوع ndarray) والـتسميات (فهرس Index). هو الـIndex الذي يرتقي بالسلسلة فوق المصفوفة العادية ويمنح كل قيمة "اسمًا". يبدأ هذا القسم من شرح ماهية السلسلة حقًا، ويأخذك في جولة لإنشائها والتعامل معها واستخدام أشهر طرقها.

⚠️ ملاحظة: يجب تشغيل الكود أدناه في بيئة Python محلية.

1. ما ستتعلمه



2. دفتر مبيعات مقهى أليس

(١) المشكلة: أرقام بلا أسماء

تدير أليس مقهى. لقد استخدمت NumPy لتسجيل مبيعاتها اليومية لأسبوع:

PYTHON
import numpy as np

sales = np.array([320, 280, 350, 410, 390, 520, 480])
# أي يوم هو 520؟ الموقع 5... لكن أي يوم؟
print(sales[5])  # 520 — لكن ماذا تعني هذه الأرقام؟
TEXT 📖 للعرض فقط
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.

هل 520 يوم الجمعة أم السبت؟ sales[5] لا يخبرك بذلك. عليك الحفاظ على جدول بحث منفصل "الموقع ← يوم الأسبوع".

(٢) الحل: السلسلة (Series) تجعل البيانات تصف نفسها

▶ مثال: مبيعات مُعلَّمة باستخدام السلسلة (Difficulty ⭐)

TEXT 📖 للعرض فقط
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd

sales = pd.Series(
    [320, 280, 350, 410, 390, 520, 480],
    index=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
    name='daily_sales'
)
print(sales)
# Mon    320
# Tue    280
# Wed    350
# Thu    410
# Fri    390
# Sat    520
# Sun    480
# Name: daily_sales, dtype: int64

print(sales['Sat'])  # 520 — وصول بناءً على التسمية
print(sales.iloc[5])  # 520 — وصول بناءً على الموقع
TEXT 📖 للعرض فقط
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.

السلسلة (Series) تربط البيانات بالتسميات معاً — sales['Sat'] أكثر توضيحاً بكثير من sales[5].

(٣) العائد: الفهرس هو بطاقة اسم البيانات

باستخدام تسميات الفهرس، تصبح البيانات قادرة على وصف نفسها:



3. البنية الداخلية للسلسلة (Series)

(1) مكوّنان: القيم + الفهرس

100%
graph LR
    A[السلسلة] --> B[القيم: مصفوفة نمباي]
    A --> C[الفهرس: كائن الفهرس]
    B --> D[320, 280, 350, ...]
    C --> E["الإثنين، الثلاثاء، الأربعاء، ..."]
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي مسبقاً على مكتبة pandas — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
الخاصية النوع الوصف
s.values np.ndarray مصفوفة البيانات الأساسية
s.index pd.Index تسميات الصفوف
s.name str اسم السلسلة
s.dtype np.dtype نوع بيانات العنصر
s.shape tuple الشكل (أبعاد، مثل (7,))
s.size int عدد العناصر

▶ مثال: فحص خصائص السلسلة (الصعوبة ⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي مسبقاً على مكتبة pandas — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd
import numpy as np

s = pd.Series([320, 280, 350], index=['Mon', 'Tue', 'Wed'])

print(f"Type of values: {type(s.values)}")  # <class 'numpy.ndarray'>
print(f"Type of index:  {type(s.index)}")   # <class 'pandas.core.indexes.base.Index'>
print(f"dtype: {s.dtype}")   # int64
print(f"shape: {s.shape}")   # (3,)
print(f"size:  {s.size}")    # 3
print(f"name:  {s.name}")    # None
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي مسبقاً على مكتبة pandas — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.

(2) مقارنة السلسلة (Series) مع المصفوفة (ndarray)

الميزة مصفوفة نمباي (ndarray) سلسلة بانداس (Pandas Series)
التسميات لا (الموضع فقط) نعم (الفهرس)
الأنواع المختلطة غير مدعومة غير موصى بها ولكنها ممكنة (كائن)
القيم المفقودة np.nan (نوع الفاصلة العائمة فقط) NaN / pd.NA (تغطية كاملة)
محاذاة العمليات حسب الموضع حسب التسمية
الاسم لا خاصية الاسم
الإحصائيات الشائعة np.mean وغيرها سلسلة طرق مثل .mean()
تحت الغطاء ndarray ndarray + Index
📌 نقطة جوهرية: السلسلة هي في الأساس "مصفوفة ndarray + فهرس + اسم". عندما تستخدم .values فقط، فإنها تنزلق إلى مجرد مصفوفة ndarray عادية.



4. طرق متعددة لإنشاء سلسلة

(1) من قائمة

▶ مثال: إنشاء سلسلة من قائمة (الصعوبة ⭐)

TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
PYTHON
import pandas as pd

# Default index: 0, 1, 2, ...
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# 0    10
# 1    20
# 2    30
# 3    40

# Custom index
s2 = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s2['b'])  # 20

# With name
s3 = pd.Series([10, 20, 30], name='scores')
print(s3.name)  # scores
TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.

(2) من قاموس

▶ مثال: إنشاء سلسلة من قاموس (الصعوبة ⭐)

TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
PYTHON
import pandas as pd

# Keys become index, values become data
population = pd.Series({
    'Tokyo': 13960000,
    'New York': 8336000,
    'London': 8982000,
    'Paris': 2161000
})
print(population)
# Tokyo      13960000
# New York    8336000
# London      8982000
# Paris       2161000

print(population['London'])  # 8982000
TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.

ميزة الإنشاء من قاموس: المفاتيح تصبح تلقائيًا الفهرس، دون الحاجة إلى تحديده يدويًا.

(3) من مصفوفة NumPy ndarray

▶ مثال: إنشاء سلسلة من ndarray (الصعوبة ⭐)

TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
PYTHON
import numpy as np
import pandas as pd

arr = np.array([3.14, 2.72, 1.41, 1.73])
s = pd.Series(arr, index=['pi', 'e', 'sqrt2', 'sqrt3'])
print(s)
# pi      3.14
# e       2.72
# sqrt2   1.41
# sqrt3   1.73
print(f"Underlying type: {type(s.values)}")  # numpy.ndarray
TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.

(4) من مقياس (بث)

▶ مثال: إنشاء سلسلة عن طريق بث مقياس (الصعوبة ⭐)

TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
PYTHON
import pandas as pd

# Broadcast scalar to fill all index positions
s = pd.Series(0, index=['A', 'B', 'C', 'D'])
print(s)
# A    0
# B    0
# C    0
# D    0
TEXT 📖 للعرض فقط
Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.

(5) مقارنة طرق الإنشاء

طريقة صيغة مصدر الفهرس حالة الاستخدام
قائمة pd.Series([1,2,3]) نطاق افتراضي للفهرس اختبار سريع
قائمة + فهرس pd.Series([1,2,3], index=...) محدد يدويًا عندما تحتاج إلى تسميات مخصصة
قاموس pd.Series({'a':1, 'b':2}) مفاتيح القاموس أزواج القيمة-التسمية
ndarray pd.Series(np.array(...)) افتراضي أو محدد تحويل بيانات NumPy
مقياس pd.Series(0, index=...) محدد يدويًا تهيئة / ملء


5. الوصول إلى السلسلة (Series)

(1) الوصول بالعنوان (Label Access) مقابل الوصول بالموضع (Position Access)

▶ مثال: طريقتان للوصول (الصعوبة ⭐⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تتغير القيم الفعليّة قليًّا حسب إصدار pandas لديك.
PYTHON
import pandas as pd

s = pd.Series([320, 280, 350, 410],
              index=['Mon', 'Tue', 'Wed', 'Thu'])

# الوصول بالعنوان (الطريقة المفضلة)
print(s['Tue'])       # 280
print(s.loc['Tue'])   # 280 — وصول صريح بالعنوان

# الوصول بالموضع
print(s.iloc[1])      # 280 — وصول صريح بالموضع

# التقطيع بالعنوان (يتضمن نقطة النهاية)
print(s['Mon':'Wed'])
# Mon    320
# Tue    280
# Wed    350

# التقطيع بالموضع (يستبعد نقطة النهاية، مثل بايثون)
print(s.iloc[0:3])
# Mon    320
# Tue    280
# Wed    350
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تتغير القيم الفعليّة قليًّا حسب إصدار pandas لديك.
🔥 خطأ شائع: التقطيع بالعنوان يتضمن نقطة النهاية ('Mon':'Wed' تشمل الأربعاء)، بينما التقطيع بالموضع يستبعد نقطة النهاية (iloc[0:3] لا يشمل الموضع 3). هذا هو أكثر نقاط الارتباك شيوعًا للمبتدئين في Pandas.

(2) مقارنة طرق الوصول

الطريقة الصيغة نقطة النهاية يوصى لـ
s[label] اختصار عنوان واحد
s.loc[label] عنوان صريح يشمل نقطة النهاية توضيح القصد بوضوح
s.iloc[pos] موضع صريح يستبعد نقطة النهاية الفهرسة بالموضع
s[[l1,l2]] تحديد بالقائمة عناوين متعددة


6. العمليات على السلسلة (Series)

(1) العمليات المتجهة (Vectorized Operations)

▶ مثال: العمليات المتجهة على سلسلة (صعوبة ⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd

sales = pd.Series([320, 280, 350, 410],
                  index=['Mon', 'Tue', 'Wed', 'Thu'])

# العمليات الحسابية
print(sales * 1.1)      # زيادة سعر بنسبة 10%
# Mon    352.0
# Tue    308.0
# Wed    385.0
# Thu    451.0

# عمليات المقارنة
print(sales > 300)
# Mon     True
# Tue    False
# Wed     True
# Thu     True

# التصفية باستخدام القيم المنطقية
print(sales[sales > 300])
# Mon    320
# Wed    350
# Thu    410
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.

(2) العمليات المتوافقة مع الفهرس (Index-Aligned Operations)

هذه إحدى أهم ميزات السلسلة (Series): تتم العمليات وفقًا للفهرس (Index) وليس وفقًا للموضع (Position).

▶ مثال: العمليات المتوافقة مع الفهرس (صعوبة ⭐⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd

week1 = pd.Series({'Mon': 320, 'Tue': 280, 'Wed': 350})
week2 = pd.Series({'Tue': 310, 'Wed': 370, 'Thu': 400})

# المحاذاة التلقائية حسب الفهرس، عدم التطابق → NaN
total = week1 + week2
print(total)
# Mon      NaN   # موجود فقط في week1
# Tue    590.0   # 280 + 310
# Wed    720.0   # 350 + 370
# Thu      NaN   # موجود فقط في week2

# ملء القيم المفقودة بـ 0 بدلاً من NaN
total_filled = week1.add(week2, fill_value=0)
print(total_filled)
# Mon    320.0
# Tue    590.0
# Wed    720.0
# Thu    400.0
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
💡 نصيحة: عندما لا تحتوي سلسلتان (Series) على قيم فهرس متطابقة، تقوم Pandas بمحاذاة تلقائية - يتم حساب العناصر المطابقة، ويتم ملء العناصر غير المتطابقة بـ NaN. وهذا يتجنب الأخطاء الخفية الناتجة عن "عدم تطابق الموضع". يمكن استخدام طرق مثل .add(fill_value=0) كحل محل عامل الجمع + لتحديد استراتيجية ملء للقيم المفقودة.



7. الطرق الشائعة لسلسلة البيانات (Series)

(1) الإحصاءات والوصف

الطريقة الوصف المكافئ في NumPy
s.mean() المتوسط np.mean(arr)
s.median() الوسيط np.median(arr)
s.std() الانحراف المعياري np.std(arr)
s.min() / s.max() الحد الأدنى / الأقصى np.min() / np.max()
s.sum() المجموع np.sum(arr)
s.describe() ملخص إحصائي لا يوجد
s.value_counts() ترددات القيم لا يوجد
s.unique() القيم الفريدة np.unique(arr)

▶ مثال: الطرق الإحصائية (الصعوبة ⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd

# قائمة الدرجات
scores = pd.Series([85, 92, 78, 95, 88, 92, 78, 85, 90, 92],
                   name='exam_score')

print(scores.describe())
# count    10.000000
# mean     87.500000
# std       5.976143
# min      78.000000
# 25%      85.000000
# 50%      89.000000
# 75%      92.000000
# max      95.000000

print(scores.value_counts())
# 92    3
# 85    2
# 78    2
# 95    1
# 90    1
# 88    1
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.

(2) الفحص والتصفية

▶ مثال: head / tail / isin (الصعوبة ⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd

# سلسلة من 1 إلى 100
s = pd.Series(range(1, 101))  # من 1 إلى 100

print(s.head())    # أول 5 قيم
print(s.tail(3))   # آخر 3 قيم

# isin: اختبار العضوية
# قائمة الفواكه
fruits = pd.Series(['apple', 'banana', 'cherry', 'apple', 'date'])
print(fruits.isin(['apple', 'cherry']))
# 0     True
# 1    False
# 2     True
# 3     True
# 4    False
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.

(3) التعامل مع القيم المفقودة (NaN)

▶ مثال: طرق التعامل مع القيم المفقودة (NaN) (الصعوبة ⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd
import numpy as np

# سلسلة تحتوي على قيم مفقودة
s = pd.Series([10, np.nan, 30, np.nan, 50])

print(s.isna())     # كشف القيم المفقودة (NaN)
# 0    False
# 1     True
# 2    False
# 3     True
# 4    False

print(s.notna())    # كشف القيم غير المفقودة
print(s.dropna())   # إزالة القيم المفقودة: [10.0, 30.0, 50.0]
print(s.fillna(0))  # ملء القيم المفقودة بالصفر
print(s.fillna(s.mean()))  # ملء بقيمة المتوسط
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.


8. مثال كامل: تحليل المبيعات الأسبوعية لمقهى القهوة

▶ مثال: تحليل شامل لمبيعات مقهى القهوة (الصعوبة ⭐⭐⭐)

TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً - قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
PYTHON
import pandas as pd
import numpy as np

# ============================================
# مثال شامل: تحليل مبيعات مقهى القهوة
# الأسبوعي باستخدام Series
# ============================================

# 1. إنشاء بيانات المبيعات مع تسميات الأيام
sales = pd.Series({
    'Mon': 320, 'Tue': 280, 'Wed': 350,
    'Thu': 410, 'Fri': 390, 'Sat': 520, 'Sun': 480
}, name='daily_sales_USD')

# 2. إحصائيات أساسية
print("=== تقرير المبيعات الأسبوعي ===")
print(f"المجموع:      ${sales.sum():,}")
print(f"المتوسط اليومي:  ${sales.mean():.0f}")
print(f"أفضل يوم:   {sales.idxmax()} (${sales.max():,})")
print(f"أسوأ يوم:  {sales.idxmin()} (${sales.min():,})")
print(f"الانحراف المعياري:    ${sales.std():.0f}")

# 3. تحليل نهاية الأسبوع مقابل أيام الأسبوع
weekday_avg = sales[['Mon','Tue','Wed','Thu','Fri']].mean()
weekend_avg = sales[['Sat','Sun']].mean()
print(f"\nمتوسط أيام الأسبوع: ${weekday_avg:.0f}")
print(f"متوسط نهاية الأسبوع: ${weekend_avg:.0f}")
print(f"زيادة نهاية الأسبوع: {(weekend_avg/weekday_avg - 1)*100:.1f}%")

# 4. التغير اليومي
change = sales.pct_change() * 100
print(f"\nأكبر انخفاض يومي: {change.min():.1f}% يوم {change.idxmin()}")
print(f"أكبر ارتفاع يومي: {change.max():.1f}% يوم {change.idxmax()}")

# 5. المبيعات التراكمية
cum_sales = sales.cumsum()
print(f"\nالوصول إلى هدف المبيعات 2,000$ في: {cum_sales[cum_sales >= 2000].index[0]}")

# 6. الترتيب
print(f"\nترتيب المبيعات:\n{sales.rank(ascending=False).astype(int)}")
TEXT 📖 للعرض فقط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً - قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.

الناتج المتوقع (مقتطف):

TEXT 📖 للعرض فقط
=== تقرير المبيعات الأسبوعي ===
المجموع:      $2,750
المتوسط اليومي:  $393
أفضل يوم:   Sat ($520)
أسوأ يوم:  Tue ($280)
الانحراف المعياري:    $82

متوسط أيام الأسبوع: $350
متوسط نهاية الأسبوع: $500
زيادة نهاية الأسبوع: 42.9%

أكبر انخفاض يومي: -12.5% يوم Tue
أكبر ارتفاع يومي: 33.3% يوم Sat

❓ أسئلة شائعة

س ما الفرق بين Series و ndarray؟
ج Series = ndarray + Index + name. القيم الأساسية لـ Series هي ndarray، ولكن مع إضافة فهرس تسمية واسم. أثناء العمليات، يتم محاذاة Series بواسطة الفهرس بينما يتم محاذاة ndarray بواسطة الموضع. عندما لا تحتاج إلى تسميات، استخدم .values فقط لاستخراج ndarray.
س هل يمكن أن يحتوي Index على قيم مكررة؟
ج نعم. يسمح Pandas بقيم Index مكررة،لكنه يؤثر على الأداء، والوصول إلى تسمية مكررة يُرجع قيماً متعددة (Series بدلاً من قيمة واحدة). من الأفضل الحفاظ على فريد Index حيثما أمكن — تحقق باستخدام s.index.is_unique.
س كيف يتم التعامل مع NaN أثناء العمليات؟
ج بشكل افتراضي، ينتشر NaN — أي عملية تتضمن NaN تُنتج NaN. تتجاوز الطرق مثل s.mean(skipna=True) NaN تلقائياً (السلوك الافتراضي). s.dropna() يزيل القيم المفقودة، وs.fillna() يملأها.
س ما الفرق بين value_counts و unique؟
ج unique() يُرجع مصفوفة بدون تكرارات (بدون عدد)، بينما value_counts() يُرجع عدد مرات ظهور كل قيمة (مرتبة تنازلياً). استخدم value_counts للترددات، وunique عندما تحتاج فقط إلى القائمة الفريدة.
س هل يمكن أن تحتوي Series على أنواع مختلفة؟
ج من الناحية التقنية نعم (dtype=كائن)، لكن لا يُنصح بذلك. تفقد Series من نوع مختلط العمليات الموجهة وتتعرض لتأثير كبير على الأداء. عندما تحتاج إلى أنواع مختلطة، استخدم DataFrame بدلاً من ذلك — لكل عمود نوعه الخاص.
س ماذا يجب أن أستخدم، loc أم iloc؟
ج استخدم loc للوصول القائم على التسميات وiloc للوصول القائم على الموضع. من الأفضل التصريح بنواياك صراحةً باستخدام loc/iloc وتجنب غموض s[...] (الذي قد يكون تسمية أو موقعاً).
س ما الفرق بين s[label] و s.loc[label]؟
ج بالنسبة لـ Series، لهما نفس التأثير. لكن s[...]] غامض — قد يكون تسمية أو موقعاً (عندما يكون Index قائم على الأعداد الصحيحة). s.loc[label] يعني صراحةً بالتسمية، وs.iloc[pos] يعني صراحةً بالموضع، لذلك يُوصى بالشكل الصريح.

📖 ملخص


📝 تمارين

  1. أساسي (مستع الصعوبة ⭐): أنشئ سلسلة (Series) بثلاث طرق (قائمة + فهرس / قاموس / ndarray)، واطبع خصائص الفهرس (index) والقيم (values) لكل منها.
  2. متوسط (مستع الصعوبة ⭐⭐): أنشئ سلسلتين (Series) لا تتطابق قيم فهارسهما بالكامل (مثلًا: المبيعات الشهرية)، أضفهما باستخدام add(fill_value=0)، وقارن النتيجة مع استخدام عامل الجمع (+) مباشرةً.
  3. تحدي (مستع الصعوبة ⭐⭐⭐): استخدم سلسلة (Series) لمحاكاة بيانات مبيعات منتج شهرية (12 شهرًا)، ثم: احسب المبيعات التراكمية → ابحث عن الشهر الذي تتجاوز فيه المجموع التراكمي 50,000 → حسب معدل النمو من شهر إلى آخر (month-over-month growth rate) → حدد الشهور ذات أعلى وأقل معدلات نمو.

← Previous: Getting Started with Pandas · Next: DataFrame Core →

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%