يُعدّ تصفية جداول بيانات Pandas بكفاءة بناءً على نطاقات التواريخ مهارةً أساسيةً في تحليل البيانات. توفر Pandas عدة طرق لتحقيق ذلك، ولكل منها نقاط قوتها وضعفها. تستعرض هذه المقالة أربعة أساليب شائعة، مع مقارنة بناء جملها وكفاءتها وحالات استخدامها.
محتويات الجدول
- التصفية باستخدام الأقنعة المنطقية
- استخدام طريقة
.query()
- استخدام طريقة
.isin()
- الاستفادة من طريقة
.between()
التصفية باستخدام الأقنعة المنطقية
يوفر إخفاء البيانات المنطقية النهج الأكثر أساسية ومرونة. يقوم بإنشاء مصفوفة منطقية (قناع) تقوم بتصفية الصفوف بناءً على الشروط المحددة. هذه الطريقة قابلة للتكيف بدرجة عالية مع السيناريوهات المعقدة.
import pandas as pd
data = {'Date': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')
mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
filtered_df = df[mask] #أكثر كفاءة من df.loc[mask]
print(filtered_df)
استخدام طريقة .query()
توفر طريقة .query()
بديلاً أكثر قابلية للقراءة واختصارًا للتصفية. وهي مفيدة بشكل خاص في حالة الشروط المعقدة.
start_date = '2023-11-01'
end_date = '2024-01-01'
filtered_df = df.query('@start_date <= Date <= @end_date')
print(filtered_df)
استخدام طريقة .isin()
تُعدّ طريقة .isin()
مناسبة عندما تحتاج إلى تحديد الصفوف بناءً على قائمة من تواريخ محددة، بدلاً من نطاق متصل. وهي أقل كفاءة بالنسبة للنطاقات المتصلة الكبيرة.
dates_to_include = pd.to_datetime(['2023-11-15', '2023-12-01'])
filtered_df = df[df['Date'].isin(dates_to_include)]
print(filtered_df)
الاستفادة من طريقة .between()
توفر طريقة .between()
نهجًا مبسّطًا لتحديد الصفوف ضمن نطاق تاريخ متصل. وهي فعّالة وسهلة القراءة.
start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')
filtered_df = df[df['Date'].between(start_date, end_date, inclusive='both')] #أضيفت وسيطة inclusive للتوضيح
print(filtered_df)
باختصار، توفر Pandas طرقًا متنوعة للتصفية القائمة على التاريخ. يعتمد الخيار الأمثل على احتياجاتك المحددة وأسلوب البرمجة لديك. يوفر إخفاء البيانات المنطقية أقصى قدر من المرونة، .query()
يعزز القابلية للقراءة، و .between()
يبسط اختيار النطاق المتصل. تذكر التأكد من أن عمود التاريخ من نوع datetime64
للحصول على أداءٍ مثالي.