Pandas: نظام الفهرسة

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

مؤشر (Index) هو الميزة الأكثر تقليلًا من أهميتها وأكثرها قوة في مكتبة بانداز. إنه أكثر بكثير من مجرد "تسمية صف" —مؤشر هو الآلية الأساسية خلف محاذاة البيانات، حيث يعمل كـ "مفتاح" يطابق القيم تلقائيًا عند تفاعل السلاسل الزمنية وأطر البيانات في العمليات الحسابية. بمجرد فهمك لمؤشر، ستفهم لماذا بانداز أكثر ملاءمة لتحليل البيانات من مكتبة نامباي. يتعمق هذا القسم في طبيعة المؤشر وأنواعه وآليات المحاذاة.

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

1. ما ستتعلمه



2. مشكلة محاذاة المبيعات لمدة شهرين لدي أليس

(1) نقطة الألم: صفوف غير محاذاة

محل القهوة الخاص بأليس له أيام تشغيل مختلفة في يناير وفبراير (31 يومًا في يناير، 28 في فبراير)، وفي بعض الأيام كان المحل مغلقًا. تحتاج إلى دمج ومقارنة بيانات الشهرين:

PYTHON
import pandas as pd

# مبيعات يناير (بعض الأيام مغلقة)
jan = pd.Series({'Mon': 320, 'Tue': 280, 'Wed': 350, 'Thu': 410, 'Fri': 390})
# مبيعات فبراير (أيام مختلفة، الاثنين/الثلاثاء مغلقان)
feb = pd.Series({'Wed': 370, 'Thu': 420, 'Fri': 400, 'Sat': 550, 'Sun': 510})

# نمط NumPy: سيقوم فقط بإضافة الموضع بالموضع — خطأ!
# Pandas: يُحاذِي تلقائيًا حسب تسمية الفهرس
total = jan + feb
print(total)
# Fri    790.0   ← تطابق!
# Mon      NaN   ← موجود فقط في يناير
# Sat      NaN   ← موجود فقط في فبراير
# Sun      NaN   ← موجود فقط في فبراير
# Thu    830.0   ← تطابق!
# Tue      NaN   ← موجود فقط في يناير
# Wed    720.0   ← تطابق!
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الخاص بك.

(2) الحل: المحاذاة التلقائية للفهرس

عندما تجري Pandas عملية حسابية، فإنها تُحاذِي تلقائيًا حسب تسمية الفهرس — القيم ذات التسميات المتطابقة تُجمع معًا، بينما تُملأ التسميات غير المتطابقة بـ NaN. لا تحتاج أبدًا إلى مطابقة صفوف البيانات يدويًا.

▶ مثال: عمليات المحاذاة و fill_value (الصعوبة ⭐⭐)

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

jan = pd.Series({'Mon': 320, 'Tue': 280, 'Wed': 350, 'Thu': 410, 'Fri': 390})
feb = pd.Series({'Wed': 370, 'Thu': 420, 'Fri': 400, 'Sat': 550, 'Sun': 510})

# ملء القيم المفقودة بـ 0 لمقارنة أنظف
total = jan.add(feb, fill_value=0)
print(total.sort_index())
# Fri    790.0
# Mon    320.0   ← يناير فقط، فبراير=0
# Sat    550.0   ← فبراير فقط، يناير=0
# Sun    510.0   ← فبراير فقط، يناير=0
# Thu    830.0
# Tue    280.0   ← يناير فقط، فبراير=0
# Wed    720.0
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الخاص بك.

(3) الفائدة: محاذاة الفهرس تمنع الأخطاء الخفية

إذا استخدمت NumPy للإضافة حسب الموضع، فإن jan[0] + feb[0] سيعطي 320 + 370 = 690 — لكن يوم الاثنين والأربعاء ليسا نفس اليوم على الإطلاق! محاذاة الفهرس تُحررك من نهج "المطابقة الموضعية" المُعرَّض للأخطاء.


3. طبيعة وأنواع الفهرس

(1) الفهرس ليس مصفوفة عادية

الفهرس هو **كائن غير قابل للتعديل، يشبه الـ ndarray، مصمم خصيصًا للفهرسة والمحاذاة القائمة على التسميات. خصائصه الرئيسية:

100%
graph TB
    IDX["الفهرس (أساسي)"] --> RI["RangeIndex<br/>مولّد تلقائيًا 0,1,2,..."]
    IDX --> DI["DatetimeIndex<br/>تسميات قائمة على الوقت"]
    IDX --> CI["CategoricalIndex<br/>مجموعة محدودة من الفئات"]
    IDX --> MI["MultiIndex<br/>تسميات هرمية"]
    IDX --> GI["فهرس عام<br/>تسميات اعتباطية"]
TEXT 📖 للعرض فقط
> **الخرج:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston ليس لديه pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

(2) مقارنة أنواع الفهارس

النوع كيفية الإنشاء الاستخدام النموذجي الميزات الخاصة
RangeIndex افتراضي عندما لا يتم تحديد فهرس كفاءة في استخدام الذاكرة
Index يُحدد يدويًا تسميات نصية/عددية للاستخدام العام
DatetimeIndex pd.date_range السلاسل الزمنية تردد/إزاحة/إعادة تعيين
CategoricalIndex dtype='category' فئات محدودة فئات مرتبة/غير مرتبة
MultiIndex from_tuples/from_product بيانات هرمية اختيار متعدد المستويات

▶ مثال: فحص نوع الفهرس (الصعوبة ⭐)

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

# RangeIndex (افتراضي)
s1 = pd.Series([1, 2, 3])
print(type(s1.index))   # <class 'pandas.core.indexes.range.RangeIndex'>

# فهرس عام (تسميات نصية)
s2 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(type(s2.index))   # <class 'pandas.core.indexes.base.Index'>

# DatetimeIndex
dates = pd.date_range('2026-01-01', periods=5)
s3 = pd.Series([100, 200, 150, 300, 250], index=dates)
print(type(s3.index))   # <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
TEXT 📖 للعرض فقط
> **الخرج:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston ليس لديه pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.


4. set_index و reset_index

(1) set_index: تحويل عمود إلى تسميات الصفوف

▶ مثال: استخدام set_index (الصعوبة ⭐)

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

df = pd.DataFrame({
    'product': ['Coffee', 'Tea', 'Juice'],
    'price': [4.50, 3.80, 5.20],
    'category': ['Hot', 'Hot', 'Cold']
})

# تعيين العمود product كفهرس
df_indexed = df.set_index('product')
print(df_indexed)
#          price category
# product
# Coffee   4.50      Hot
# Tea      3.80      Hot
# Juice    5.20     Cold

print(df_indexed.loc['Coffee', 'price'])  # 4.5

# حذف العمود بعد التعيين (الافتراضي=True)
# الاحتفاظ بالعمود: drop=False
df_keep = df.set_index('product', drop=False)
print(df_keep.columns)  # لا يزال يحتوي على 'product'
TEXT 📖 للعرض فقط
> **الإخراج:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا — قم بتثبيتها محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًّا حسب إصدار pandas لديك.

(2) reset_index: استعادة تسميات الصفوف إلى عمود

▶ مثال: استخدام reset_index (الصعوبة ⭐)

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

df = pd.DataFrame({
    'price': [4.50, 3.80, 5.20]
}, index=['Coffee', 'Tea', 'Juice'])

# إعادة تعيين الفهرس إلى عمود
df_reset = df.reset_index()
print(df_reset)
#    index  price
# 0  Coffee   4.50
# 1     Tea   3.80
# 2    Juice   5.20

# تسمية العمود الجديد
df_reset2 = df.reset_index(names='product')
print(df_reset2.columns)  # Index(['product', 'price'])

# حذف الفهرس تمامًا (عدم الاحتفاظ به كعمود)
df_drop = df.reset_index(drop=True)
print(df_drop)
#    price
# 0   4.50
# 1   3.80
# 2   5.20
TEXT 📖 للعرض فقط
> **الإخراج:** شغّل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا — قم بتثبيتها محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًّا حسب إصدار pandas لديك.

(3) مقارنة بين set_index و reset_index

العملية set_index reset_index
الاتجاه عمود ← تسميات الصفوف تسميات الصفوف ← عمود
العمود الأصلي يُحذف افتراضيًّا (drop=True) يُحتفظ به كعمود جديد
الفهرس الافتراضي لا يوجد (يجب تحديد عمود) RangeIndex (0,1,2,...)
التعديل في المكان لا افتراضيًّا (inplace=False) لا افتراضيًّا


5. تعمّق في محاذاة الفهارس

(1) قواعد المحاذاة

عندما يتم دمج كائنتين من Pandas (سلسلة أو إطار بيانات) في عملية:

  1. يتم حساب اتحاد كلا الفهارس
  2. يتم تنفيذ العمليات على العناصر المتطابقة التسميات
  3. يتم ملء العناصر غير المتطابقة التسميات بقيمة NaN
100%
graph LR
    A["سلسلة A<br/>{a:1, b:2, c:3}"] --> ADD["A + B"]
    B["سلسلة B<br/>{b:20, c:30, d:40}"] --> ADD
    ADD --> R["النتيجة<br/>{a:NaN, b:22, c:33, d:NaN}"]
TEXT 📖 للعرض فقط
> **المخرج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تتغير القيم الفعلية قليلاً اعتمادًا على إصدار pandas الخاص بك.

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

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

df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['x', 'y', 'z'])
df2 = pd.DataFrame({'A': [10, 20, 30]}, index=['y', 'z', 'w'])

result = df1 + df2
print(result)
#       A
# w   NaN
# x   NaN
# y  22.0
# z  33.0

# مع fill_value
result2 = df1.add(df2, fill_value=0)
print(result2)
#       A
# w  30.0
# x   1.0
# y  22.0
# z  33.0
TEXT 📖 للعرض فقط
> **المخرج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تتغير القيم الفعلية قليلاً اعتمادًا على إصدار pandas الخاص بك.

نصيحة: تحدث محاذاة الفهارس ليس فقط مع عوامل التشغيل +, -, *, / ولكن أيضًا مع طرق مثل add/sub/mul/div. ينطبق معامل fill_value فقط على الجانب الذي يفتقر إلى تسمية — إذا كان كلا الجانبين يفتقران إلى تسمية، فالنتيجة لا تزال NaN.



6. إعادة الفهرسة والمحاذاة

(1) إعادة الفهرسة: تغيير شكل الفهرس

▶ مثال: استخدام إعادة الفهرسة (الصعوبة ⭐⭐)

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

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

# إعادة الفهرسة لتضمين تسميات جديدة (تعبئة بـ NaN)
s_full = s.reindex(['Mon', 'Tue', 'Wed', 'Thu', 'Fri'])
print(s_full)
# Mon    320.0
# Tue    280.0
# Wed    350.0
# Thu      NaN
# Fri      NaN

# تعبئة القيم المفقودة
s_filled = s.reindex(['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], fill_value=0)
print(s_filled)

# التعبئة للأمام (استخدام القيمة السابقة)
s_ffill = s.reindex(['Mon', 'Tue', 'Wed', 'Thu', 'Fri'], method='ffill')
print(s_ffill)
# Thu يأخذ قيمة Wed (350)
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.

(2) المحاذاة: محاذاة متسلسلتين معاً

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

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

s1 = pd.Series({'a': 1, 'b': 2, 'c': 3})
s2 = pd.Series({'b': 20, 'c': 30, 'd': 40})

# محاذاة كلاهما إلى الفهرس الموحد
s1_aligned, s2_aligned = s1.align(s2)
print(s1_aligned)
# a    1.0
# b    2.0
# c    3.0
# d    NaN

print(s2_aligned)
# a     NaN
# b    20.0
# c    30.0
# d    40.0

# المحاذاة مع قيمة التعبئة
s1_f, s2_f = s1.align(s2, fill_value=0)
print(s1_f)
# a    1
# b    2
# c    3
# d    0
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.

(3) مقارنة إعادة الفهرسة والمحاذاة

الطريقة الغرض حالة الاستخدام
reindex تغيير شكل كائن واحد إلى فهرس جديد توسيع الفهرس أو إعادة ترتيبه
align محاذاة كائنين في وقت واحد مطابقة كائنين لبعضهما البعض


7. الخصائص والطرق الشائعة للمؤشر

(1) المرجع السريع

الخاصية/الوصف الطريقة نتيجة المثال
idx.is_unique هل جميع العلامات فريدة True / False
idx.is_monotonic_increasing هل العلامات تزداد بشكل أحادي الاتجاه True / False
idx.has_duplicates هل يوجد تكرارات True / False
idx.nunique() عدد القيم الفريدة 7
idx.duplicated() قناع منطقي للتكرارات مصفوفة منطقية
idx.drop_duplicates() إزالة التكرارات مؤشر جديد

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

TEXT 📖 للعرض فقط
> **Output:** 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

idx1 = pd.Index(['a', 'b', 'c', 'd'])
idx2 = pd.Index(['a', 'b', 'b', 'c'])

print(idx1.is_unique)       # True
print(idx2.is_unique)       # False
print(idx2.has_duplicates)  # True
print(idx1.nunique())       # 4
print(idx2.duplicated())    # [False, False, True, False]
TEXT 📖 للعرض فقط
> **Output:** 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.


8. مثال كامل: محاذاة وتنظيم بيانات المبيعات الشهرية

▶ مثال: سير عمل محاذاة المبيعات لمدة شهرين (الصعوبة ⭐⭐⭐)

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

# ============================================
# مثال شامل: محاذاة وتنظيم بيانات المبيعات
# الشهرية باستخدام الفهرس (Index)
# ============================================

# 1. مبيعات يومية لمدة شهرين (أيام مختلفة)
jan = pd.Series({
    '2026-01-06': 320, '2026-01-07': 280, '2026-01-08': 350,
    '2026-01-09': 410, '2026-01-10': 390
}, name='jan_sales')
feb = pd.Series({
    '2026-02-04': 370, '2026-02-05': 420, '2026-02-06': 400,
    '2026-02-07': 550
}, name='feb_sales')

# 2. معلومات الفهرس
print("=== تحليل الفهرس ===")
print(f"يناير فريد: {jan.index.is_unique}")    # True
print(f"فبراير فريد: {feb.index.is_unique}")    # True

# 3. محاذاة كلا الشهرين إلى تنسيق مشترك
jan_a, feb_a = jan.align(feb, fill_value=0)
print(f"\n=== البيانات بعد المحاذاة ===")
comparison = pd.DataFrame({'jan': jan_a, 'feb': feb_a})
print(comparison)

# 4. تعيين الفهرس على DataFrame للوصول القائم على التسمية
df = pd.DataFrame({
    'product': ['Latte', 'Cappuccino', 'Espresso', 'Mocha', 'Americano'],
    'price': [5.50, 4.80, 3.50, 5.20, 3.00],
    'category': ['Specialty', 'Specialty', 'Classic', 'Specialty', 'Classic']
})
print(f"\n=== المنتجات حسب الفئة ===")
df_cat = df.set_index('category')
print(df_cat.loc['Specialty', ['product', 'price']])

# 5. إعادة الفهرسة لضمان وجود جميع أيام الأسبوع
weekday_sales = pd.Series(
    [320, 280, 350, 410, 390],
    index=['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
)
full_week = weekday_sales.reindex(
    ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
    fill_value=0
)
print(f"\n=== مبيعات الأسبوع كامل ===")
print(full_week)
TEXT 📖 للعرض فقط
> **الخرج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًّا حسب إصدار pandas لديك.

❓ أسئلة شائعة

س هل يمكن أن يحتوي الفهرس على تسميات مكررة؟
ج نعم. يسمح Pandas بتكرار تسميات الفهرس، ولكن الوصول إلى تسمية مكررة يُرجع قيمًا متعددة (سلسلة Series بدلاً من قيمة واحدة)، وتنخفض الأداء. استخدم s.index.is_unique للتحقق من التفرد. من أفضل الممارسات الحفاظ على تفرد الفهرس كلما أمكن ذلك.
س هل يؤدي set_index إلى فقدان البيانات؟
ج بشكل افتراضي، يزيل drop=True العمود من DataFrame ويحوّله إلى الفهرس. إذا كنت بحاجة إلى الاحتفاظ بالعمود، استخدم df.set_index('col', drop=False). يمكن دائمًا استعادة معلومات الفهرس إلى عمود عبر reset_index.
س ما الفرق بين reindex و loc؟
ج يمكن لـ reindex إدخال تسميات جديدة (تُملأ بـ fill_value)، بينما يمكن لـ loc الوصول فقط إلى التسميات الموجودة (الوصول إلى تسمية غير موجودة يرفع KeyError). الغرض من reindex هو " إعادة تشكيل الفهرس إلى تنسيق محدد"، بينما الغرض من loc هو "اختيار البيانات حسب التسمية".
س متى يجب استخدام CategoricalIndex؟
ج عندما تأتي التسميات من مجموعة محدودة من الفئات (مثل أيام الأسبوع، الأشهر، أسماء الولايات)، يوفر CategoricalIndex الذاكرة ويفرض مجال التسمية. على سبيل المثال، استخدم CategoricalIndex لضمان أن تنتج reindex جميع أيام الأسبوع السبعة.
س إذا كان الفهرس غير قابل للتغيير، كيف أغيّره؟
ج كائن الفهرس نفسه غير قابل للتغيير، لكن يمكنك استبداله بالكامل عبر df.index = new_index، أو إعادة تسمية التسميات عبر df.rename(index=...). لا يمكنك تخصيص عناصر فردية من الفهرس.
س ماذا يفعل معلمة drop في reset_index؟
ج باستخدام drop=True، يتم تجاهل الفهرس الأصلي (لا يحتفظ به كعمود)، مما يمنحك RangeIndex نظيفًا. باستخدام drop=False (الافتراضي)، يتم استعادة الفهرس الأصلي كعمود عادي. حالة استخدام شائعة: بعد groupby، اتصل بـ reset_index(drop=True) لمسح مفاتيح التجميع.

📖 ملخص


📝 تمارين

  1. أساسي (مستع الصعوبة ⭐): أنشئ Series تحتوي على بيانات السكان لـ 5 مدن. استخدم set_index و reset_index على DataFrame للتحويل بين الأعمدة والفهرس، وراقب كيف يتغير الفهرس.
  2. متوسط (مستع الصعوبة ⭐⭐): أنشئ Seriesين بفهارس متداخلة جزئيًا. أضفهما باستخدام كلًا من عامل + والدالة add(fill_value=0)، ثم قارن الفروقات. بعد ذلك، استخدم الدالة align لمحاذاة السلسلتين.
  3. تحدي (مستع الصعوبة ⭐⭐⭐): استخدم DatetimeIndex لإنشاء بيانات مبيعات لشهرين (يناير وفبراير، مع تواريخ مختلفة). استخدم reindex لملء جميع التواريخ لكلي الشهرين (املأ القيم المفقودة بالـ 0)، ثم احسب معدل النمو اليومي بين الشهرَين.

← Previous: DataFrame Core · Next: Data Types →

Web-Tutorial.com

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

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

100%