Pandas هي مكتبة Python قوية لمعالجة البيانات وتحليلها. وتتضمن إحدى المهام الشائعة تحديد الصفوف من DataFrame بناءً على شروط تُطبق على أعمدة محددة. تستعرض هذه المقالة ثلاث طرق فعالة لاسترجاع مؤشرات الصفوف التي تلبي معيارًا معينًا.
جدول المحتويات
- الفهرسة البولينية: نهج بسيط وفعال
- الاستفادة من
np.where()
في NumPy من أجل المرونة - استخدام
query()
في Pandas لاستعلامات معقدة قابلة للقراءة
الفهرسة البولينية: نهج بسيط وفعال
يوفر الفهرسة البولينية حلاً مختصراً وفعالاً لمعايير الاختيار البسيطة. فهي تستفيد مباشرة من صحة الشرط لتصفية الصفوف.
دعونا نوضح ذلك بمثال:
import pandas as pd
data = {'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
print(df)
# الحصول على المؤشرات حيث 'col1' أكبر من 2
indices = df[df['col1'] > 2].index.tolist()
print(indices) # الإخراج: [2, 3, 4]
يقوم هذا الكود أولاً بإنشاء قناع بوليني (df['col1'] > 2
)، ثم يستخدمه لتصفية DataFrame، وأخيراً يستخرج مؤشرات الصفوف المحددة باستخدام .index.tolist()
.
الاستفادة من np.where()
في NumPy من أجل المرونة
توفر دالة np.where()
في NumPy نهجًا أكثر تنوعًا، وهو مفيد بشكل خاص للشروط المعقدة أو الشروط المتعددة المتزامنة.
import numpy as np
indices = np.where(df['col1'] > 2)[0].tolist()
print(indices) # الإخراج: [2, 3, 4]
np.where(df['col1'] > 2)
تُرجع مجموعة؛ يحتوي العنصر الأول على مصفوفة من المؤشرات التي تلبي الشرط. نقوم بالوصول إلى هذا العنصر باستخدام [0]
وتحويله إلى قائمة باستخدام .tolist()
.
استخدام query()
في Pandas لاستعلامات معقدة قابلة للقراءة
تعزز طريقة query()
إمكانية القراءة، خاصةً بالنسبة للشروط المعقدة. فهي تسمح بتحديد المعايير باستخدام تعبيرات نصية.
indices = df.query('col1 > 2').index.tolist()
print(indices) # الإخراج: [2, 3, 4]
# مثال مع شروط متعددة
indices = df.query('col1 > 2 and col2 < 9').index.tolist()
print(indices) # الإخراج: [2]
تقبل طريقة query()
مباشرةً تمثيلًا نصيًا للشرط، مما يحسن إمكانية القراءة بشكل كبير، خاصةً مع الشروط المتعددة أو المعقدة.
الخلاصة: تستعيد كل طريقة مؤشرات بفعالية بناءً على شرط. الفهرسة البولينية هي الأفضل للشروط البسيطة؛ np.where()
تُعالج السيناريوهات الأكثر تعقيدًا؛ وquery()
تتفوق في إمكانية القراءة لعمليات التصفية المتقدمة.