LOC مقابل ILOC في الباندا: الفرق بين LOC و ILOC في الباندا

نشرت: 2020-08-01

جدول المحتويات

Loc و iloc في الباندا

سبب شائع للارتباك بين مطوري Python الجدد هو loc مقابل iloc. كلاهما يبدوان متشابهين للغاية ويقومان بمهام مماثلة. لذلك هذا يمكن أن يحير أي طالب.

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

هيا بنا نبدأ.

الفرق بين loc و iloc فريف

1. إيلوك في بايثون

يمكنك استخدام iloc في بايثون للاختيار. إنه يعتمد على عدد صحيح ويساعدك على الاختيار حسب الموضع. لذلك ، إذا كنت تريد العثور على الصف الذي يحتوي على الفهرس 5 ، فسوف يعرض لك iloc الصف الخامس من إطار البيانات بغض النظر عن اسمه أو تسميته.

إليك مثال على iloc في بايثون:

>>> mydict = [{'a': 1، 'b': 2، 'c': 3، 'd': 4}،

... {'أ': 100، 'ب': 200، 'ج': 300، 'د': 400}،

... {'a': 1000، 'b': 2000، 'c': 3000، 'd': 4000}]

>>> df = pd.DataFrame (mydict)

>>> مدافع

ا ب ت ث

0 1 2 3 4

1100200300400

2 1000 2000 3000 4000

سنقوم بفهرسة الصفوف ذات العدد الصحيح باستخدام الدالة iloc لإطار البيانات أعلاه:

>>> النوع (df.iloc [0])

<class 'pandas.core.series.Series'>

>>> df.iloc [0]

أ 1

ب 2

ج 3

د 4

الاسم: 0 ، النوع: int64

2. loc في الباندا

يمكنك استخدام loc in Pandas للوصول إلى صفوف وأعمدة متعددة باستخدام الملصقات ؛ ومع ذلك ، يمكنك استخدامه مع مصفوفة منطقية أيضًا.

إذا كنت تستخدم loc للعثور على صف به الفهرس 5 ، فلن تحصل على الصف الخامس معه. بدلاً من ذلك ، ستحصل فقط على الصف الذي يحمل الاسم "5".

فيما يلي مثال على loc في Pandas:

>>> df = pd.DataFrame ([[1، 2]، [4، 5]، [7، 8]]،

... الفهرس = ['cobra'، 'viper'، 'sidewinder']،

... أعمدة = ['max_speed'، 'shield'])

>>> مدافع

درع السرعة القصوى

كوبرا 1 2

الافعى 4 5

سيلويندر 7 8

ما ورد أعلاه كان الجدول الذي سنستخرج منه الصف:

>>> df.loc ["أفعى"]

السرعة القصوى 4

الدرع 5

الاسم: الافعى ، النوع: int64

مثال مفصل لـ loc vs iloc

على الرغم من أننا نستخدم هاتين الوظيفتين للاختيار ، فمن الأفضل أن نناقش مثالاً مفصلاً لفهم الفروق بينهما.

في مثالنا ، سنستخدم مجموعة بيانات عملاء telco ، المتوفرة على kaggle. سنضيفه إلى إطار البيانات:

df = pd.read_csv ("المشاريع / churn_prediction / Telco-Customer-Churn.csv")

df.head ()

هوية شخصية جنس المواطن الأب شريك المعالون فترة هاتف خطوط متعددة إنترنت حماية
0 7590-VHVEG أنثى 0 نعم رقم 1 رقم لا يوجد هاتف DSL رقم
1 5575-GNVDE ذكر 0 رقم رقم 34 نعم رقم DSL نعم
2 3668-QPYBK ذكر 0 رقم رقم 2 نعم رقم DSL نعم

تحتوي مجموعة البيانات هذه على 21 عمودًا. لقد عرضنا القليل منها فقط لأغراض توضيحية. كما ناقشنا بالفعل ، نستخدم loc لتحديد البيانات حسب التسمية. هنا ، أسماء الأعمدة هي تسميات الأعمدة الخاصة بهم ، مثل الجنس ، والحيازة ، والأمن عبر الإنترنت ؛ كلها أسماء الأعمدة وكذلك التسميات.

نظرًا لأننا لم نقم بتعيين أي فهرس محدد ، فإن الباندا ستنشئ فهرسًا صحيحًا للصفوف افتراضيًا. تسميات الصفوف هي أعداد صحيحة تبدأ من 0 وتصعد. في هذا المثال ، سنرى كيف يتصرف loc و iloc بشكل مختلف.

  • حدد الصف "1" والعمود "الشريك"

df.loc [1، "شريك"]

الإخراج: "لا"

يعرض القيمة الموجودة في عمود "الشريك" في الصف "1".

  • حدد تسميات الصفوف "4" والأعمدة "معرف العميل" و "الجنس"

df.loc [: 4، ['customerID'، 'gender']]

هوية الزبون

جنس

0

7590-VHVEG

أنثى

1

5575-GNVDE

ذكر

2

3668-QPYBK

ذكر

3

7795-CFOCW

ذكر

4

9237-HQITU

أنثى

  • حدد تسميات الصفوف "1" و "2" و "3" والعمود "التابعون"

df.loc [[1،2،3]، "المعالين"]

1 لا

2 لا

3 لا

الاسم: التابعون ، النوع: كائن

هذه المرة ، سنقوم بتصفية إطار البيانات وتطبيق iloc أو loc:

  • حدد تسميات الصفوف إلى أعمدة "10" و "PhoneService" و "InternetService" للعميل الذي لديه شريك (يجب أن يكون الشريك "نعم")

df [df.Partner == 'نعم']. loc: 10، ['PhoneService'، 'InternetService']]

في الحالة المذكورة أعلاه ، طبقنا مرشحًا على قاعدة البيانات ولكننا لم نغير الفهرس ، لذا فقد حذف مخرجاتنا تسميات متعددة للصفوف التي يتطلبها عامل التصفية الخاص بنا. لذلك ، باستخدام loc [: 10] هنا ، اخترنا الصفوف التي تحتوي على تسميات تصل إلى "10".

من ناحية أخرى ، إذا استخدمنا iloc هنا وقمنا بتطبيق المرشح ، فسنحصل على 10 صفوف حيث يتم تحديد iloc حسب الموضع بغض النظر عن الملصقات. هذه هي النتيجة التي سنحصل عليها إذا طبقنا iloc [: 10]:

df [df.Partner == 'نعم']. iloc [: 10، [6،8]]

خدمة الهاتف خدمة الإنترنت
0 رقم DSL
8 نعم الألياف البصرية
10 نعم DSL
12 نعم الألياف البصرية
15 نعم الألياف البصرية
18 نعم DSL
21 نعم رقم
23 نعم DSL
24 نعم DSL
26 نعم الألياف البصرية

لا بد أنك لاحظت أنه يتعين علينا تغيير طريقتنا في تحديد الأعمدة.

قراءة: دروس بايثون الباندا

  • حدد أول 5 أعمدة وأول 5 صفوف باستخدام iloc

df.iloc [: 4،: 4]

هوية الزبون جنس مواطن كبير السن شريك
0 7590-VHVEG أنثى 0 نعم
1 5575-GNVDE ذكر 0 رقم
2 3668-QPYBK ذكر 0 رقم
3 7795-CFOCW ذكر 0 رقم

يمكننا استخدام iloc لتحديد المواضع من النهاية. لذلك ، علينا ببساطة استخدام الأعداد الصحيحة السالبة (-1 ، -2 ، إلخ) والبدء بها.

  • حدد آخر 5 أعمدة وآخر 5 صفوف

df.iloc [-5 :، -5:]

الفواتير الورقية طريقة الدفع او السداد رسوم شهرية الكلفة الاجماليه يخض، يحرك بعنف
7038 نعم شيك بالبريد 84.80 1990.5 رقم
7039 نعم بطاقة ائتمان 103.20 7362.9 رقم
7040 نعم شيك إلكتروني 29.60 346.45 رقم
7041 نعم شيك بالبريد 74.40 306.6 نعم
7042 نعم التحويل المصرفي 105.65 6844.5 رقم

يمكنك استخدام وظيفة lambda مع iloc أيضًا. (دالة lambda هي وظيفة مجهولة صغيرة في Python يمكن أن تحتوي على تعبير واحد ولكن أي عدد من الوسائط)

  • حدد كل صف ثالث حتى الصف الخامس عشر واعرض فقط عمودي "خدمة الإنترنت" و "الشريك"

df.iloc [lambda x: (x.index x 3 == 0) & (x.index <= 150] ['Partner'، 'InternetService']]

شريك خدمة الإنترنت
0 نعم DSL
3 رقم DSL
6 رقم الألياف البصرية
9 رقم DSL
12 نعم الألياف البصرية
15 نعم الألياف البصرية

يمكننا أيضًا تحديد التسميات أو المواضع الموجودة بينهما.

  • حدد مواضع الأعمدة بين 4 و 6 ، ومواضع الصفوف بين 20 و 25

df.iloc [20:25 ، 4: 6]

المعالون فترة
20 رقم 1
21 رقم 12
22 رقم 1
23 رقم 58
24 رقم 49

الآن ، إذا حاولت تمرير التسميات إلى iloc ، فستظهر لك Pandas رسالة الخطأ التالية:

ValueError: الفهرسة المستندة إلى الموقع لا يمكن أن تحتوي إلا على أنواع [عدد صحيح ، شريحة عدد صحيح (نقطة البداية متضمنة ، نقطة النهاية مستبعدة) ، قائمة مثل الأعداد الصحيحة ، المصفوفة المنطقية]

ستحصل على خطأ مشابه إذا قمت بتمرير المناصب إلى الموقع.

اقرأ أيضًا: أسئلة مقابلة الباندا

تعرف على المزيد حول Python

يجب على الطالب طرح الأسئلة والعثور على إجاباتهم. نأمل أن يكون هذا المقال قد أجاب على أسئلتك حول loc in Pandas (أو iloc في Python). سيكون من الأفضل إذا جربت هذه الوظائف بنفسك على مجموعات بيانات مختلفة لفهم كيفية عملها.

إذا كنت تريد معرفة المزيد حول Python و Pandas والمواضيع ذات الصلة ، فيجب عليك التوجه إلى مدونتنا. يضيف خبراؤنا العديد من الموارد التفصيلية هناك.

إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع برنامج IIIT-B & upGrad التنفيذي PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1 - في 1 مع موجهين في الصناعة ، أكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

كيف يمكننا إضافة صفوف من Pandas DataFrame؟

لإدراج صفوف في DataFrame ، يمكننا استخدام أوامر loc و iloc و ix.

1. يتم استخدام loc في الغالب لملصقات الفهرس الخاص بنا. قد يكون مفهومًا عندما ندرج في loc 4 ، مما يشير إلى أننا نسعى لإدخالات DataFrame بفهرس 4.
2. يتم استخدام iloc في الغالب للعثور على مواقع في الفهرس. يبدو الأمر كما لو أننا أدخلنا في iloc 4 ، مما يشير إلى أننا نبحث عن إدخالات DataFrame الموجودة في الفهرس 4.
3. الحالة ix معقدة لأننا نمرر تسمية إلى ix إذا كان الفهرس يعتمد على عدد صحيح. يشير ix 4 إلى أننا نبحث في DataFrame عن قيم ذات فهرس 4.

ما هي إعادة الفهرسة في سياق الباندا في بايثون؟

يتم تغيير تسميات الصفوف والأعمدة في DataFrame عندما نعيد فهرستها. يشير مصطلح "إعادة الفهرسة" إلى عملية محاذاة البيانات إلى مجموعة محددة من الملصقات على طول محور واحد. في Pandas ، يمكن استخدام إعادة الفهرسة لتغيير فهرس صفوف وأعمدة DataFrame. يمكن استخدام العديد من هياكل بيانات الفهرس المرتبطة بالعديد من سلاسل الباندا أو إطار بيانات الباندا مع الفهارس.

ما هي بعض عمليات البيانات في الباندا؟

هناك العديد من عمليات البيانات المهمة لـ DataFrame في Pandas ، وهي كالتالي:

1. اختيار الصفوف والأعمدة - بتمرير أسماء الصفوف والأعمدة ، يمكننا تحديد أي صف وعمود في DataFrame. يصبح أحادي البعد ويعتبر كسلسلة عند اختياره من DataFrame.
2. تصفية البيانات - باستخدام بعض التعبيرات المنطقية في DataFrame ، يمكننا تصفية البيانات.
3. القيم الفارغة - عند عدم إعطاء أي بيانات للعناصر ، فإنها تتلقى قيمة خالية. لا يمكن أن تكون هناك قيم في الأعمدة المختلفة ، والتي يتم تمثيلها بشكل عام كـ NaN.