دعونا نتابع استكشاف المزيد من الميزات والقدرات في Pandas التي تساعدك في التعامل مع البيانات بفعالية. في هذا الدرس، سنركز على عمليات الفلترة والتصفية، التجميع، ودمج البيانات، وهي من الأدوات القوية في تحليل البيانات.
الدرس الخامس: الفلترة، التصفية، والتجميع في Pandas
1. الفلترة والتصفية (Filtering and Selection)
تعتبر عملية الفلترة والتصفية في Pandas أداة قوية للتعامل مع مجموعات البيانات الكبيرة. يمكنك استخدام الشروط المنطقية لتحديد صفوف أو أعمدة معينة بناءً على معايير محددة.
بالعربية:
import pandas as pd
# إنشاء DataFrame بسيط
data = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى', 'خالد'],
'العمر': [23, 25, 22, 20, 29],
'الراتب': [5000, 6000, 5500, 5200, 7000]
}
df = pd.DataFrame(data)
# فلترة البيانات للحصول على الصفوف التي العمر فيها أكبر من 22
filtered_df = df[df['العمر'] > 22]
print(filtered_df)
# اختيار الأعمدة "الاسم" و "الراتب" فقط
selected_columns = df[['الاسم', 'الراتب']]
print(selected_columns)
بالإنجليزية:
import pandas as pd
# Creating a simple DataFrame
data = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla', 'Khalid'],
'Age': [23, 25, 22, 20, 29],
'Salary': [5000, 6000, 5500, 5200, 7000]
}
df = pd.DataFrame(data)
# Filtering data to get rows where Age is greater than 22
filtered_df = df[df['Age'] > 22]
print(filtered_df)
# Selecting only 'Name' and 'Salary' columns
selected_columns = df[['Name', 'Salary']]
print(selected_columns)
2. التجميع (Grouping)
تستخدم دالة groupby()
لتجميع البيانات بناءً على عمود معين. هذه العملية مفيدة جدًا عند الحاجة إلى تلخيص البيانات أو حساب الإحصائيات على أساس مجموعة.
بالعربية:
import pandas as pd
# إنشاء DataFrame بسيط
data = {
'القسم': ['المبيعات', 'التسويق', 'المبيعات', 'الموارد البشرية', 'التسويق'],
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى', 'خالد'],
'الراتب': [5000, 6000, 5500, 5200, 7000]
}
df = pd.DataFrame(data)
# تجميع البيانات بناءً على القسم وحساب متوسط الراتب
grouped = df.groupby('القسم')['الراتب'].mean()
print(grouped)
بالإنجليزية:
import pandas as pd
# Creating a simple DataFrame
data = {
'Department': ['Sales', 'Marketing', 'Sales', 'HR', 'Marketing'],
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla', 'Khalid'],
'Salary': [5000, 6000, 5500, 5200, 7000]
}
df = pd.DataFrame(data)
# Grouping data by department and calculating average salary
grouped = df.groupby('Department')['Salary'].mean()
print(grouped)
3. دمج البيانات (Merging and Joining)
في العديد من الأحيان، يكون لديك بيانات في جداول متعددة وتحتاج إلى دمجها في DataFrame واحد. Pandas توفر أدوات قوية لدمج البيانات باستخدام merge()
, join()
, أو concat()
.
بالعربية:
import pandas as pd
# إنشاء اثنين من DataFrames
employees = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى'],
'القسم': ['المبيعات', 'التسويق', 'المبيعات', 'الموارد البشرية']
}
salaries = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى'],
'الراتب': [5000, 6000, 5500, 5200]
}
df_employees = pd.DataFrame(employees)
df_salaries = pd.DataFrame(salaries)
# دمج البيانات بناءً على عمود الاسم
merged_df = pd.merge(df_employees, df_salaries, on='الاسم')
print(merged_df)
بالإنجليزية:
import pandas as pd
# Creating two DataFrames
employees = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla'],
'Department': ['Sales', 'Marketing', 'Sales', 'HR']
}
salaries = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla'],
'Salary': [5000, 6000, 5500, 5200]
}
df_employees = pd.DataFrame(employees)
df_salaries = pd.DataFrame(salaries)
# Merging data based on the 'Name' column
merged_df = pd.merge(df_employees, df_salaries, on='Name')
print(merged_df)
4. التعامل مع البيانات المتكررة (Handling Duplicates)
البيانات المتكررة يمكن أن تؤدي إلى نتائج مضللة في التحليل. يمكنك استخدام drop_duplicates()
لإزالة الصفوف المتكررة.
بالعربية:
import pandas as pd
# إنشاء DataFrame مع صفوف متكررة
data = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى', 'محمد'],
'القسم': ['المبيعات', 'التسويق', 'المبيعات', 'الموارد البشرية', 'المبيعات']
}
df = pd.DataFrame(data)
# إزالة الصفوف المتكررة بناءً على جميع الأعمدة
df_unique = df.drop_duplicates()
print(df_unique)
# إزالة الصفوف المتكررة بناءً على عمود الاسم فقط
df_unique_name = df.drop_duplicates(subset='الاسم')
print(df_unique_name)
بالإنجليزية:
import pandas as pd
# Creating a DataFrame with duplicate rows
data = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla', 'Mohamed'],
'Department': ['Sales', 'Marketing', 'Sales', 'HR', 'Sales']
}
df = pd.DataFrame(data)
# Removing duplicate rows based on all columns
df_unique = df.drop_duplicates()
print(df_unique)
# Removing duplicate rows based on the 'Name' column only
df_unique_name = df.drop_duplicates(subset='Name')
print(df_unique_name)
5. ترتيب البيانات (Sorting)
لترتيب البيانات في DataFrame، يمكنك استخدام sort_values()
لترتيب الصفوف بناءً على قيمة عمود محدد.
بالعربية:
import pandas as pd
# إنشاء DataFrame بسيط
data = {
'الاسم': ['أحمد', 'سارة', 'محمد', 'ليلى', 'خالد'],
'العمر': [23, 25, 22, 20, 29]
}
df = pd.DataFrame(data)
# ترتيب البيانات بناءً على العمر تصاعديًا
df_sorted = df.sort_values(by='العمر')
print(df_sorted)
# ترتيب البيانات بناءً على العمر تنازليًا
df_sorted_desc = df.sort_values(by='العمر', ascending=False)
print(df_sorted_desc)
بالإنجليزية:
import pandas as pd
# Creating a simple DataFrame
data = {
'Name': ['Ahmed', 'Sara', 'Mohamed', 'Layla', 'Khalid'],
'Age': [23, 25, 22, 20, 29]
}
df = pd.DataFrame(data)
# Sorting data by Age in ascending order
df_sorted = df.sort_values(by='Age')
print(df_sorted)
# Sorting data by Age in descending order
df_sorted_desc = df.sort_values(by='Age', ascending=False)
print(df_sorted_desc)
التحديات العملية
التحدي 1: الفلترة والتصفية
- لديك DataFrame يحتوي على أعمار ورواتب الموظفين. قم بتصفية الصفوف حيث يكون العمر أكبر من 24.
- اختر فقط الأعمدة “الاسم” و"الراتب" من DataFrame الناتج.
التحدي 2: التجميع
- لديك DataFrame يحتوي على معلومات عن الموظفين (الاسم، القسم، الراتب). قم بتجميع البيانات بناءً على القسم واحسب مجموع الرواتب في كل قسم.
- احسب عدد الموظفين في كل قسم.
التحدي 3: دمج البيانات
- لديك اثنين من DataFrames: الأول يحتوي على معلومات عن الموظفين (الاسم، العمر، القسم)، والثاني يحتوي على معلومات عن رواتبهم (الاسم، الراتب). قم بما يلي:
- دمج DataFrames بناءً على عمود الاسم.
- احفظ DataFrame الناتج إلى ملف
merged_data.csv
.
التحدي 4: التعامل مع البيانات المت
كررة
- قم بإنشاء DataFrame يحتوي على بيانات متكررة. ثم استخدم
drop_duplicates()
لإزالة الصفوف المتكررة. - احذف الصفوف المتكررة بناءً على عمود معين فقط.
التحدي 5: ترتيب البيانات
- لديك DataFrame يحتوي على أسماء ودرجات الطلاب. قم بترتيب البيانات بناءً على الدرجات تصاعديًا.
- قم بترتيب البيانات بناءً على الأسماء أبجديًا.
بهذه الطرق، ستتمكن من فهم كيفية التعامل مع البيانات بفعالية باستخدام Pandas. تذكر أن التجربة والممارسة هي المفتاح لتعلم أي تقنية جديدة. استمتع بالتجربة واستمر في التعلم!