Pandas هي الأداة الأساسية لتحليل بيانات Python. يستخدمها كل محلل. لكن معظم الناس يتعلمونها بشكل تفاعلي — بالبحث في جوجل عن كل عملية عندما يحتاجونها — ولا يبنون أبدًا نموذجًا عقليًا كاملاً لكيفية عملها.
يغطي هذا الدليل كل ما يحتاج محلل البيانات العامل إلى معرفته حول Pandas، بدءًا من تحميل البيانات وحتى بناء نصوص برمجية للأتمتة. لا يوجد تعلم آلي، ولا نظرية إحصائية — فقط العمليات التي ستستخدمها كل يوم.
تحميل البيانات: حيث تبدأ كل عملية تحليل
import pandas as pd
# From files
df = pd.read_csv('sales_data.csv')
df = pd.read_excel('report.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')
# First look at your data — always do this first
print(df.shape) # (rows, columns) e.g. (1250, 8)
df.head(10) # first 10 rows
df.dtypes # data type of each column
df.describe() # count, mean, std, min, max, percentiles
df.isnull().sum() # missing values per column
df.duplicated().sum() # number of duplicate rowsالتحديد والتصفية
# Select columns
df['salary'] # single column → Series
df[['name', 'dept', 'salary']] # multiple columns → DataFrame
# Filter rows
df[df['salary'] > 60000]
df[(df['dept'] == 'Sales') & (df['salary'] > 50000)]
df[df['region'].isin(['North', 'West'])]
df[df['name'].str.contains('Smith', case=False)]
# loc (label-based) vs iloc (position-based)
df.loc[df['dept'] == 'Finance', 'salary'] # Finance salaries only
df.iloc[0:5, 0:3] # first 5 rows, first 3 columnsتنظيف البيانات — 80% من العمل الحقيقي
# Handle missing values
df.dropna() # drop rows with any null
df.dropna(subset=['salary', 'dept']) # drop only if these are null
df['salary'].fillna(df['salary'].median()) # fill with median
df.fillna({'dept': 'Unknown', 'salary': 0}) # fill per column
# Fix data types
df['date'] = pd.to_datetime(df['date'])
df['salary'] = df['salary'].astype(float)
df['id'] = df['id'].astype(str)
# Remove duplicates
df.drop_duplicates(subset=['employee_id'], keep='first')
# Rename columns
df.rename(columns={'emp_name': 'name', 'dept_code': 'dept'}, inplace=True)
# Clean string columns
df['name'] = df['name'].str.strip().str.title()
df['email'] = df['email'].str.lower().str.strip()GroupBy — ما يعادل SQL GROUP BY
# Basic groupby
df.groupby('dept')['salary'].mean()
# Multiple aggregations at once — the most useful pattern
result = df.groupby('dept').agg(
avg_salary=('salary', 'mean'),
total_employees=('name', 'count'),
max_salary=('salary', 'max'),
min_salary=('salary', 'min')
).reset_index()
# Sort the result
result.sort_values('avg_salary', ascending=False)
# GroupBy with multiple columns
df.groupby(['dept', 'region'])['revenue'].sum().reset_index()دمج DataFrames — ما يعادل SQL JOIN
# Inner join (default) — only matching rows
result = pd.merge(orders, customers, on='customer_id')
# Left join — all orders, matching customer data
result = pd.merge(orders, customers, on='customer_id', how='left')
# Join on different column names
result = pd.merge(orders, customers,
left_on='cust_id', right_on='id',
how='left')
# Stack DataFrames vertically (same columns, more rows)
all_data = pd.concat([df_2023, df_2024, df_2025], ignore_index=True)الجداول المحورية (Pivot Tables)
# Revenue by product and region
pivot = df.pivot_table(
values='revenue',
index='product',
columns='region',
aggfunc='sum',
fill_value=0
)
# Add row/column totals
pivot_with_totals = df.pivot_table(
values='revenue',
index='product',
columns='region',
aggfunc='sum',
margins=True,
margins_name='Total'
)العمل مع التواريخ
df['date'] = pd.to_datetime(df['date'])
# Extract components
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['month_name'] = df['date'].dt.strftime('%b %Y') # 'Jan 2025'
df['day_of_week'] = df['date'].dt.day_name()
df['quarter'] = df['date'].dt.quarter
# Filter by date
df[df['date'] >= '2025-01-01']
df[(df['date'] >= '2025-01-01') & (df['date'] < '2025-04-01')]
# Group by month
df.groupby(df['date'].dt.to_period('M'))['revenue'].sum()تصدير النتائج
# Save to files
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='Analysis', index=False)
# Multiple sheets
with pd.ExcelWriter('report.xlsx') as writer:
summary.to_excel(writer, sheet_name='Summary', index=False)
detail.to_excel(writer, sheet_name='Detail', index=False)
pivot.to_excel(writer, sheet_name='Pivot')النموذج الذي يميز المحللين الجيدين عن العظماء
الفرق ليس في معرفة المزيد من الوظائف — بل في تنظيم تحليلك بوضوح. ابدأ دائمًا بسؤال عملي. تحقق دائمًا من صحة بياناتك قبل تحليلها (تحقق من القيم الخالية، وأنواع البيانات، والتكرارات). وثّق دائمًا افتراضاتك. وعند الشك، تحقق من عملك مقابل طريقة أبسط — إذا كانت نتيجة Pandas groupby لا تتطابق مع جدول Excel المحوري اليدوي، فهناك خطأ ما.
للمزيد من الممارسة العميقة لـ Python، يغطي كتابنا الإلكتروني Python for Data Analysis ثلاثة مشاريع كاملة وشاملة باستخدام هذه الأنماط بالضبط على مجموعات بيانات حقيقية.