الوصول المستند إلى التسميات والمستند إلى المواضع
استرجع العناصر باستخدام .loc (التسمية) و.iloc (الموضع الصحيح)، وافهم الفرق بينهما.
الوصول المستند إلى التسميات والمستند إلى المواضع درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
طريقتان للوصول إلى عناصر Series
يوفّر Pandas طريقتي وصول أساسيتين لاختيار العناصر من Series: .loc للوصول المعتمد على التسميات و.iloc للوصول المعتمد على الموضع الصحيح. من الضروري فهم متى تستخدم كلًّا منهما؛ إذ إن استخدام الطريقة الخاطئة مع Series ذات فهرس صحيح ينتج عنه نتائج مربكة، كما أن Pandas 2.0 أوقف دعم العديد من الاستخدامات المبهمة المباشرة للأقواس المربعة.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.loc['b']) # 20 -- by label
print(s.iloc[1]) # 20 -- by position.loc: الوصول المعتمد على التسميات
تصل .loc إلى العناصر باستخدام تسمية الفهرس. يمكنك تمرير تسمية واحدة (فتعيد قيمة مفردة)، أو قائمة من التسميات (فتعيد Series)، أو مقطع من التسميات (ويشمل الطرفين، بخلاف المقاطع في Python). إذا لم تكن التسمية موجودة، يرفع Pandas الخطأ KeyError. استخدم .loc عندما تكون التسميات ذات معنى، مثل التواريخ والأسماء والمعرّفات.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['c']) # 30
print(s.loc[['a', 'c']]) # a:10 c:30
print(s.loc['b':'d']) # b:20 c:30 d:40 -- inclusive.iloc: الوصول المعتمد على الموضع
تصل .iloc إلى العناصر باستخدام الموضع الصحيح الذي يبدأ من الصفر، وتتجاهل تسميات الفهرس تمامًا. ويشبه سلوكها الفهرسة في قوائم Python: إذ تحسب المواضع السالبة من النهاية، وتتبع المقاطع اصطلاح Python الذي يستثني موضع النهاية. استخدم .iloc عندما تحتاج إلى العنصر ذي الترتيب «n» بغض النظر عن تسميته.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.iloc[2]) # 30 -- third element
print(s.iloc[-1]) # 50 -- last element
print(s.iloc[1:4]) # b:20 c:30 d:40 -- exclusive stopمتى تختلف .loc عن .iloc
يظهر الفرق بأهميته عند التعامل مع Series ذات تسميات فهرس صحيحة. إذا كانت تسميات فهرس Series هي [5, 10, 15]، فإن s.loc[5] يعيد العنصر ذي التسمية 5 (وهو العنصر الأول)، بينما يرفع s.iloc[5] الخطأ IndexError (إذ لا يوجد سوى 3 عناصر). اختر الطريقة دائمًا بناءً على ما إذا كنت تقصد «العنصر ذي التسمية X» أم «العنصر ذي الترتيب X».
import pandas as pd
s = pd.Series([100, 200, 300], index=[5, 10, 15])
print(s.loc[10]) # 200 -- element with label 10
print(s.iloc[1]) # 200 -- second element
# s.loc[1] would raise KeyError -- no label 1اختيار عدة تسميات باستخدام .loc
مرّر قائمة إلى .loc لاختيار عدة عناصر بأي ترتيب، مع إمكانية تكرار العناصر. تكون النتيجة Series جديدة تحمل التسميات نفسها الموجودة في القائمة التي مرّرتها. يشبه ذلك الفهرسة المتقدمة في NumPy، لكنه يعتمد على تسميات الفهرس بدلًا من المواضع. ويُستخدم عادةً لإعادة ترتيب الأعمدة أو اختيار مجموعة جزئية منها في مسارات تحليل البيانات.
import pandas as pd
s = pd.Series({'Jan': 100, 'Feb': 200, 'Mar': 300, 'Apr': 400})
# Select Q1 months in reverse order
print(s.loc[['Mar', 'Feb', 'Jan']])
# Mar 300
# Feb 200
# Jan 100تقطيع التسميات باستخدام .loc
بخلاف المقاطع في Python، تشمل المقاطع التي ينفذها .loc الطرفين معًا. يعيد s.loc['b':'d'] العناصر ذات التسميات b وc وd. وقد يكون هذا مفاجئًا إذا كنت معتادًا على اصطلاح Python الذي يستثني موضع النهاية. تأكد من وجود التسميات التي تقطع بينها فعليًا في الفهرس، وإلا فقد يعيد المقطع نتائج غير متوقعة دون إصدار خطأ.
import pandas as pd
s = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
# b 1
# c 2
# d 3
# dtype: int64
# Note: 'd' is INCLUDED (inclusive stop)الفهرسة المنطقية باستخدام .loc
يمكنك تمرير Series منطقية إلى .loc لتصفية العناصر. يجب أن يكون لـ Series المنطقية الفهرس نفسه الموجود في Series المستهدفة. وهذا هو مكافئ Pandas للقناع المنطقي في NumPy، كما يتيح استخدام الشروط المركبة مع & و|. وهي الطريقة القياسية لتصفية الصفوف في DataFrames أيضًا.
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc[s > 4])
# b 7
# d 9
# dtype: int64تعيين القيم باستخدام .loc و.iloc
يمكن استخدام كل من .loc و.iloc في الجانب الأيسر من عملية إسناد بهدف تعديل القيم مباشرةً. وهذا هو النمط الصحيح؛ إذ قد يؤدي استخدام الفهرسة المتسلسلة مثل s['a'] = 99 إلى ظهور SettingWithCopyWarning في DataFrames. أما في Series، فعادةً ما يكون الوصول المباشر باستخدام التسمية آمنًا، لكن .loc أوضح ويوصى باستخدامه.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.loc['b'] = 99
print(s)
# a 10
# b 99
# c 30الوصول باستخدام الأقواس المربعة إلى Series
تعمل صيغة الأقواس المربعة المباشرة s['label'] للوصول باستخدام التسمية، وتعادل s.loc['label'] عند استخدام فهارس نصية. أما مع الفهارس الصحيحة، فكان السلوك ملتبسًا وتغيّر في Pandas 2.0؛ إذ أصبحت تعني الآن الوصول باستخدام التسمية دائمًا. ولتحقيق الوضوح وكتابة شيفرة أكثر توافقًا مع الإصدارات المستقبلية، استخدم .loc أو .iloc صراحةً بدلًا من الاعتماد على تحديد معنى الأقواس تلقائيًا.
import pandas as pd
s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s['y']) # 20 -- label access via brackets
print(s.loc['y']) # 20 -- explicit and preferredالوصول إلى العناصر من DatetimeIndex
عندما تحتوي Series على DatetimeIndex، تقبل .loc سلاسل تواريخ جزئية لتحديد النطاق بسهولة. يعيد s.loc['2023'] جميع العناصر من عام 2023، بينما يعيد s.loc['2023-01':'2023-06'] عناصر النصف الأول من عام 2023. وهذه إحدى أكثر ميزات Pandas سهولةً في استخدام بيانات السلاسل الزمنية.
import pandas as pd
dates = pd.date_range('2023-01-01', periods=5, freq='ME')
values = pd.Series([10, 20, 30, 40, 50], index=dates)
print(values.loc['2023-03':'2023-05'])
# 2023-03-31 30
# 2023-04-30 40
# 2023-05-31 50at وiat للوصول السريع إلى عنصر واحد
تُعدّ .at[label] و.iat[position] طريقتي وصول محسّنتين للقيم المفردة؛ فهما أسرع من .loc و.iloc عند الوصول إلى عنصر واحد ضمن حلقة ضيقة، لأنهما تتجاوزان التكلفة الإضافية لإعادة كائن Series. ولا يمكنهما اختيار عدة عناصر. استخدمهما عندما تحتاج إلى أعلى أداء ممكن لعمليات البحث المتكررة عن عناصر مفردة.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.at['b']) # 20 -- label scalar access
print(s.iat[2]) # 30 -- position scalar accessتحقق سريع
اختبر مدى فهمك لـ .loc و.iloc من هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس أن: .loc تصل إلى العناصر باستخدام تسمية الفهرس، وتشمل نهايتا المقطع، وأن .iloc تصل إلى العناصر باستخدام الموضع الصحيح، وتستثني نهاية المقطع مثل قوائم Python، وأن .at و.iat طريقتا وصول أسرع إلى القيم المفردة عند البحث عن عناصر مفردة داخل الحلقات. سنستكشف بعد ذلك العمليات المتجهة على Series وكيف يتعامل Pandas تلقائيًا مع محاذاة الفهارس.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «الوصول المستند إلى التسميات والمستند إلى المواضع» مجاني؟
نعم — نص درس «الوصول المستند إلى التسميات والمستند إلى المواضع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «الوصول المستند إلى التسميات والمستند إلى المواضع»؟
استرجع العناصر باستخدام .loc (التسمية) و.iloc (الموضع الصحيح)، وافهم الفرق بينهما. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الوصول المستند إلى التسميات والمستند إلى المواضع»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء Series
- الوصول المستند إلى التسميات والمستند إلى المواضع
- العمليات المتجهة على Series
- دوال Series المفيدة