Pandas: التعرف على المسلسلات
آخر تحديث: 2026-08-26
تُعدّ السلسلة (Series) هي بنية البيانات الأكثر أساسية في مكتبة Pandas — يمكن تخيّلها على أنها "مصفوفة أحادية البُعد مُعَلَّمة". تتكون السلسلة من جزأين: البيانات (مصفوفة NumPy من النوع ndarray) والـتسميات (فهرس Index). هو الـIndex الذي يرتقي بالسلسلة فوق المصفوفة العادية ويمنح كل قيمة "اسمًا". يبدأ هذا القسم من شرح ماهية السلسلة حقًا، ويأخذك في جولة لإنشائها والتعامل معها واستخدام أشهر طرقها.
1. ما ستتعلمه
- ❶ ما هي السلسلة حقًا (ndarray + الفهرس)
- ❷ نظام تسميات الفهرس وكيفية تحديد القيم
- ❸ طرق متعددة لإنشاء سلسلة
- ❹ العمليات المتجهة على السلسلة
- ❺ الطرق الشائعة (head / tail / describe / value_counts)
2. دفتر مبيعات مقهى أليس
(١) المشكلة: أرقام بلا أسماء
تدير أليس مقهى. لقد استخدمت NumPy لتسجيل مبيعاتها اليومية لأسبوع:
import numpy as np
sales = np.array([320, 280, 350, 410, 390, 520, 480])
# أي يوم هو 520؟ الموقع 5... لكن أي يوم؟
print(sales[5]) # 520 — لكن ماذا تعني هذه الأرقام؟
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
هل 520 يوم الجمعة أم السبت؟ sales[5] لا يخبرك بذلك. عليك الحفاظ على جدول بحث منفصل "الموقع ← يوم الأسبوع".
(٢) الحل: السلسلة (Series) تجعل البيانات تصف نفسها
▶ مثال: مبيعات مُعلَّمة باستخدام السلسلة (Difficulty ⭐)
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
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 — وصول بناءً على الموقع
شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) لمتابعة الشرح. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
السلسلة (Series) تربط البيانات بالتسميات معاً — sales['Sat'] أكثر توضيحاً بكثير من sales[5].
(٣) العائد: الفهرس هو بطاقة اسم البيانات
باستخدام تسميات الفهرس، تصبح البيانات قادرة على وصف نفسها:
- وصول بناءً على التسمية:
s['Mon']أوضح منs[0] - عمليات مُحاذاة: تُحاذا سلسلتان (Series) تلقائياً حسب التسمية عند دمجهما
- دلالات غنية: يمكن أن يكون الفهرس تواريخ، أو سلاسل نصية، أو حتى تسميات متعددة المستويات
3. البنية الداخلية للسلسلة (Series)
(1) مكوّنان: القيم + الفهرس
graph LR
A[السلسلة] --> B[القيم: مصفوفة نمباي]
A --> C[الفهرس: كائن الفهرس]
B --> D[320, 280, 350, ...]
C --> E["الإثنين، الثلاثاء، الأربعاء، ..."]
قم بتشغيل هذا في بيئة بايثون محلية (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 | عدد العناصر |
▶ مثال: فحص خصائص السلسلة (الصعوبة ⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي مسبقاً على مكتبة pandas — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (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 |
.values فقط، فإنها تنزلق إلى مجرد مصفوفة ndarray عادية.
4. طرق متعددة لإنشاء سلسلة
(1) من قائمة
▶ مثال: إنشاء سلسلة من قائمة (الصعوبة ⭐)
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.
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
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) من قاموس
▶ مثال: إنشاء سلسلة من قاموس (الصعوبة ⭐)
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.
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
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 (الصعوبة ⭐)
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.
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
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) من مقياس (بث)
▶ مثال: إنشاء سلسلة عن طريق بث مقياس (الصعوبة ⭐)
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.
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
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)
▶ مثال: طريقتان للوصول (الصعوبة ⭐⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تتغير القيم الفعليّة قليًّا حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (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)
▶ مثال: العمليات المتجهة على سلسلة (صعوبة ⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
(2) العمليات المتوافقة مع الفهرس (Index-Aligned Operations)
هذه إحدى أهم ميزات السلسلة (Series): تتم العمليات وفقًا للفهرس (Index) وليس وفقًا للموضع (Position).
▶ مثال: العمليات المتوافقة مع الفهرس (صعوبة ⭐⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا - قم بتثبيته محليًا (`pip install pandas`) لتتمكن من المتابعة. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
.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) |
▶ مثال: الطرق الإحصائية (الصعوبة ⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
(2) الفحص والتصفية
▶ مثال: head / tail / isin (الصعوبة ⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
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
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
(3) التعامل مع القيم المفقودة (NaN)
▶ مثال: طرق التعامل مع القيم المفقودة (NaN) (الصعوبة ⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
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())) # ملء بقيمة المتوسط
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليه قليلاً حسب إصدار pandas لديك.
8. مثال كامل: تحليل المبيعات الأسبوعية لمقهى القهوة
▶ مثال: تحليل شامل لمبيعات مقهى القهوة (الصعوبة ⭐⭐⭐)
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً - قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
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)}")
قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً - قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
الناتج المتوقع (مقتطف):
=== تقرير المبيعات الأسبوعي ===
المجموع: $2,750
المتوسط اليومي: $393
أفضل يوم: Sat ($520)
أسوأ يوم: Tue ($280)
الانحراف المعياري: $82
متوسط أيام الأسبوع: $350
متوسط نهاية الأسبوع: $500
زيادة نهاية الأسبوع: 42.9%
أكبر انخفاض يومي: -12.5% يوم Tue
أكبر ارتفاع يومي: 33.3% يوم Sat
❓ أسئلة شائعة
.values فقط لاستخراج ndarray.s.index.is_unique.s.mean(skipna=True) NaN تلقائياً (السلوك الافتراضي). s.dropna() يزيل القيم المفقودة، وs.fillna() يملأها.unique() يُرجع مصفوفة بدون تكرارات (بدون عدد)، بينما value_counts() يُرجع عدد مرات ظهور كل قيمة (مرتبة تنازلياً). استخدم value_counts للترددات، وunique عندما تحتاج فقط إلى القائمة الفريدة.s[...] (الذي قد يكون تسمية أو موقعاً).s[...]] غامض — قد يكون تسمية أو موقعاً (عندما يكون Index قائم على الأعداد الصحيحة). s.loc[label] يعني صراحةً بالتسمية، وs.iloc[pos] يعني صراحةً بالموضع، لذلك يُوصى بالشكل الصريح.📖 ملخص
- السلسلة (Series) هي في الأساس مصفوفة NumPy (ndarray) + فهرس (Index) + اسم؛ القيم الأساسية هي مصفوفة NumPy
- يُمكّن الفهرس البيانات من وصف نفسها ذاتياً ويدعم الوصول القائم على التسمية (loc) والقائم على الموضع (iloc)
- طرق الإنشاء: قائمة / قاموس / مصفوفة NumPy / بث قياسي — الإنشاء من قاموس هو الأكثر طبيعية
- عمليات السلسلة تتم محاذاتها تلقائياً عبر الفهرس؛ التسميات غير المتطابقة تُنتج قيمة NaN
- التقطيع القائم على التسمية يشمل النقطة النهائية (
'Mon':'Wed'يشمل Wed)؛ التقطيع القائم على الموضع يستبعد النقطة النهائية (iloc[0:3]يستبعد 3) - الطرق الشائعة: describe() / value_counts() / head() / tail() / isna() / fillna() / dropna()
- السلسلة تناسب البيانات ذات البعد الواحد؛ استخدم إطار البيانات (DataFrame) للبيانات الجدولية ذات البعدين
📝 تمارين
- أساسي (مستع الصعوبة ⭐): أنشئ سلسلة (Series) بثلاث طرق (قائمة + فهرس / قاموس / ndarray)، واطبع خصائص الفهرس (index) والقيم (values) لكل منها.
- متوسط (مستع الصعوبة ⭐⭐): أنشئ سلسلتين (Series) لا تتطابق قيم فهارسهما بالكامل (مثلًا: المبيعات الشهرية)، أضفهما باستخدام add(fill_value=0)، وقارن النتيجة مع استخدام عامل الجمع (+) مباشرةً.
- تحدي (مستع الصعوبة ⭐⭐⭐): استخدم سلسلة (Series) لمحاكاة بيانات مبيعات منتج شهرية (12 شهرًا)، ثم: احسب المبيعات التراكمية → ابحث عن الشهر الذي تتجاوز فيه المجموع التراكمي 50,000 → حسب معدل النمو من شهر إلى آخر (month-over-month growth rate) → حدد الشهور ذات أعلى وأقل معدلات نمو.
← Previous: Getting Started with Pandas · Next: DataFrame Core →