Pandas: الإطار الأساسي للبيانات
آخر تحديث: 2026-08-26
البيانات الإطارية هي بنية البيانات الأساسية في Pandas — جدول ثنائي الأبعاد مُسمَّى حيث كل عمود هو سلسلة (Series) مع نوع البيانات (dtype) والاسم الخاص بها. يمكن تخيّل البيانات الإطارية كورقة Excel أو جدول SQL مكتوب بلغة برمجة، ولكنها أقوى: قابلة للبرمجة، وقابلة للتوسيع، ومُتحكم بإصداراتها. يأخذك هذا القسم في عمق البنية الأساسية للبيانات الإطارية.
١. ما ستتعلمه
- ❶ جوهر إطار البيانات (مجموعة من السلاسل)
- ❷ نظام الفهرس للصفوف/الأعمدة (الفهرس + الأعمدة)
- ❸ طرق متعددة لإنشاء إطار بيانات
- ❹ فحص البيانات (info / describe / head / tail)
- ❺ الخصائص الأساسية (shape / index / columns / dtypes / values)
2. جدول المنتجات لتجارة إلكترونية تابعة لـ "تشارلي"
(1) نقطة الضعف: إدارة أعمدة متعددة معًا
يدير "تشارلي" موقعًا للتجارة الإلكترونية ويحتاج إلى إدارة بيانات المنتجات: الاسم، الفئة، السعر، المخزون، والتقييم — أي 5 أعمدة من أنواع مختلفة. باستخدام Series فقط، سيحتاج إلى الاحتفاظ بـ 5 كائنات Series منفصلة والتأكد من بقاء فهارسها متوافقة.
import pandas as pd
# 5 Series منفصلة — يجب الحفاظ على توافق الفهرس يدويًا
names = pd.Series(['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'])
categories = pd.Series(['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'])
prices = pd.Series([999.99, 699.99, 349.99, 449.99, 79.99])
stocks = pd.Series([50, 120, 80, 35, 200])
ratings = pd.Series([4.7, 4.5, 4.3, 4.6, 4.2])
# أي سعر ينتمي لأي منتج؟ آمل أن يظل الفهرس متوافقًا!
> **المخرجات:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًلا حسب إصدار pandas لديك.
(2) الحل: الـ DataFrame تربط الأعمدة معًا
▶ مثال: إدارة بيانات المنتجات باستخدام DataFrame (الصعوبة ⭐)
> **المخرجات:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًلا حسب إصدار pandas لديك.
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})
print(df)
# name category price stock rating
# 0 Laptop Electronics 999.99 50 4.7
# 1 Phone Electronics 699.99 120 4.5
# 2 Tablet Electronics 349.99 80 4.3
# 3 Monitor Electronics 449.99 35 4.6
# 4 Keyboard Accessories 79.99 200 4.2
print(df['name']) # سلسلة (Series)
print(df.loc[0]) # الصف الأول كسلسلة (Series)
> **المخرجات:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتًا مسبقًا — قم بتثبيته محليًا (`pip install pandas`) للمتابعة. قد تختلف القيم الفعلية قليًلا حسب إصدار pandas لديك.
جميع الأعمدة الخمسة مرتبطة معًا في DataFrame واحد، بأسماء أعمدة وصفية ذاتيًا وتوافق تلقائي للصفوف.
(3) الفائدة: الـ DataFrame هو "مجموعة من الأعمدة"
الـ DataFrame ليس "مصفوفة (ndarray) ثنائية الأبعاد" — بل هو قاموس مرتب من الـ Series. كل عمود هو Series مستقل ببنية بياناته الخاصة (dtype)، لكن جميع الأعمدة تتشارك نفس الفهرس الخاص بالصفوف.
3. الهيكل الأساسي لإطار البيانات (DataFrame)
(1) مخطط الهيكل الداخلي
graph TB
subgraph DataFrame
direction TB
COL["فهرس الأعمدة<br/>(الاسم، الفئة، السعر، المخزون، التقييم)"]
ROW["فهرس الصفوف<br/>(0, 1, 2, 3, 4)"]
S1["Series: الاسم<br/>dtype: object"]
S2["Series: الفئة<br/>dtype: object"]
S3["Series: السعر<br/>dtype: float64"]
S4["Series: المخزون<br/>dtype: int64"]
S5["Series: التقييم<br/>dtype: float64"]
end
ROW --> S1
ROW --> S2
ROW --> S3
ROW --> S4
ROW --> S5
COL --> S1
COL --> S2
COL --> S3
COL --> S4
COL --> S5
> **Output:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston ليس لديه pandas مثبت مسبقاً — قم بتثبيته محلياً (`pip install pandas`) للمتابعة. القيم الفعلية قد تختلف قليلاً اعتماداً على إصدار pandas الخاص بك.
| المفهوم | الوصف | التشبيه |
|---|---|---|
| فهرس الصفوف (Row Index) | تسميات الصفوف المشتركة بين جميع الأعمدة | أرقام الصفوف في Excel |
| الأعمدة (Columns) | تسمية الاسم لكل عمود | رؤوس الأعمدة في Excel |
| سلسلة العمود (Column Series) | كل عمود كسلسلة (Series) مستقلة | عمود Excel مفرد |
| القيم (values) | المصفوفة ثنائية الأبعاد (ndarray) الأساسية | مصفوفة البيانات الأولية |
(2) إطار البيانات (DataFrame) مقابل المصفوفة ثنائية الأبعاد (2D ndarray)
| الميزة | مصفوفة NumPy ثنائية الأبعاد (2D ndarray) | إطار بيانات Pandas (DataFrame) |
|---|---|---|
| قيد النوع (Type constraint) | نوع بيانات عام واحد (dtype) | نوع بيانات مستقل لكل عمود |
| تسميات الصفوف | لا يوجد (positions صحيحة فقط) | فهرس (Index) (قابل للتخصيص) |
| تسميات الأعمدة | لا يوجد (positions صحيحة فقط) | الأعمدة (أسماء الأعمدة) |
| اختيار العمود | arr[:, 2] |
df['price'] |
| اختيار الصف | arr[0, :] |
df.loc[0] |
| الأنواع المختلطة | غير مدعوم | مدعوم بشكل أصلي |
| القيم المفقودة | np.nan (float فقط) | NaN / NaT / pd.NA |
values في إطار البيانات (DataFrame) تُعيد مصفوفة ثنائية الأبعاد (2D ndarray)، ولكن عند وجود أنواع مختلطة يصبح نوع البيانات (dtype) هو كائن — مما يُسبب انخفاضاً كبيراً في الأداء. للعمليات الرقمية البحتة، قم باختيار الأعمدة الرقمية أولاً، ثم استدعي .values.
4. طرق متعددة لإنشاء إطار بيانات
(1) من قاموس (الأكثر شيوعاً)
▶ مثال: إنشاء إطار بيانات من قاموس (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
# Dict of lists: keys = column names, values = column data
df = pd.DataFrame({
'product': ['Coffee', 'Tea', 'Juice', 'Water'],
'price': [4.50, 3.80, 5.20, 1.50],
'calories': [5, 2, 120, 0]
})
print(df)
# product price calories
# 0 Coffee 4.50 5
# 1 Tea 3.80 2
# 2 Juice 5.20 120
# 3 Water 1.50 0
# Custom row index
df2 = pd.DataFrame({
'product': ['Coffee', 'Tea', 'Juice'],
'price': [4.50, 3.80, 5.20]
}, index=['A001', 'A002', 'A003'])
print(df2.index) # Index(['A001', 'A002', 'A003'])
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
(2) من قائمة قوائم
▶ مثال: إنشاء إطار بيانات من قائمة قوائم (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
# List of lists: each inner list = one row
data = [
['Coffee', 4.50, 5],
['Tea', 3.80, 2],
['Juice', 5.20, 120],
['Water', 1.50, 0]
]
df = pd.DataFrame(data, columns=['product', 'price', 'calories'])
print(df)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
(3) من قائمة قواميس
▶ مثال: إنشاء إطار بيانات من قائمة قواميس (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
# List of dicts: each dict = one row
data = [
{'product': 'Coffee', 'price': 4.50, 'calories': 5},
{'product': 'Tea', 'price': 3.80, 'calories': 2},
{'product': 'Juice', 'price': 5.20, 'calories': 120}
]
df = pd.DataFrame(data)
print(df)
# Missing keys become NaN
data2 = [
{'product': 'Coffee', 'price': 4.50},
{'product': 'Tea', 'calories': 2}
]
df2 = pd.DataFrame(data2)
print(df2)
# product price calories
# 0 Coffee 4.50 NaN
# 1 Tea NaN 2.0
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
(4) من مصفوفة NumPy ndarray
▶ مثال: إنشاء إطار بيانات من مصفوفة ndarray (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import numpy as np
import pandas as pd
arr = np.random.randn(4, 3) # 4 rows, 3 columns of random numbers
df = pd.DataFrame(arr, columns=['A', 'B', 'C'])
print(df.shape) # (4, 3)
print(df.dtypes) # all float64
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
(5) مقارنة طرق الإنشاء
| الطريقة | الصيغة | السمات | حالة الاستخدام |
|---|---|---|---|
| قاموس | pd.DataFrame({'col': [data]}) |
موجه بالعمود، الأكثر طبيعية | الأكثر شيوعاً |
| قائمة قوائم | pd.DataFrame([[r1c1, ...], ...]) |
موجه بالصف | بناء صف بصف |
| قائمة قواميس | pd.DataFrame([{'col': val, ...}, ...]) |
موجه بالصف، المفاتيح المفقودة تصبح NaN تلقائياً | بيانات API/JSON |
| مصفوفة ndarray | pd.DataFrame(np.array(...)) |
بيانات متجانسة | تحويل بيانات NumPy |
| read_csv | pd.read_csv('file.csv') |
تحميل من ملف | الأكثر شيوعاً في المشاريع الحقيقية |
5. فحص واستكشاف البيانات
(1) معاينة سريعة: head / tail / sample
▶ مثال: معاينة إطار بيانات (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
df = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',
'Mouse', 'Headset', 'Speaker', 'Camera', 'Charger'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99,
29.99, 149.99, 89.99, 599.99, 19.99],
'stock': [50, 120, 80, 35, 200, 300, 150, 180, 25, 500]
})
print(df.head()) # first 5 rows
print(df.head(3)) # first 3 rows
print(df.tail(2)) # last 2 rows
print(df.sample(3)) # random 3 rows (for inspection)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
(2) نظرة عامة على البيانات: info
▶ مثال: طريقة info بالتفصيل (الصعوبة ⭐⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Carol', 'David'],
'age': [28, 34, 25, 30, 45],
'salary': [75000.0, 92000.0, np.nan, 88000.0, 105000.0],
'department': ['Sales', 'Engineering', 'Marketing', 'Sales', 'Management']
})
df.info()
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 entries, 0 to 4
# Data columns (total 4 columns):
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 name 5 non-null object
# 1 age 5 non-null int64
# 2 salary 4 non-null float64 ← 1 missing value!
# 3 department 5 non-null object
# dtypes: float64(1), int64(1), object(2)
# memory usage: 288.0+ bytes
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
info() هي الخطوة الأولى في تحليل البيانات — تخبرك: عدد الصفوف، نوع بيانات (dtype) لكل عمود، ما إذا كانت هناك قيم مفقودة، واستخدام الذاكرة.
(3) الملخص الإحصائي: describe
▶ مثال: ملخص إحصائي باستخدام describe (الصعوبة ⭐)
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
import pandas as pd
df = pd.DataFrame({
'price': [999.99, 699.99, 349.99, 449.99, 79.99],
'stock': [50, 120, 80, 35, 200],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})
# Numeric columns only (default)
print(df.describe())
# price stock rating
# count 5.00 5.00 5.00
# mean 515.79 97.00 4.46
# std 347.31 69.72 0.21
# min 79.99 35.00 4.20
# 25% 349.99 50.00 4.30
# 50% 449.99 80.00 4.50
# 75% 699.99 120.00 4.60
# max 999.99 200.00 4.70
# Include all columns
print(df.describe(include='all'))
> **Output:** Run this in a local Python environment (pandas 2.x). The Piston server does not have pandas pre-installed — install it locally (`pip install pandas`) to follow along. Actual values may vary slightly depending on your pandas version.
| الطريقة | ماذا تُظهر | حالة الاستخدام |
|---|---|---|
df.head() |
أول 5 صفوف | نظرة سريعة على تنسيق البيانات |
df.info() |
عدد الصفوف / أنواع بيانات الأعمدة / القيم المفقودة / الذاكرة | خطوة أولى يجب فحصها |
df.describe() |
ملخص إحصائي للأعمدة الرقمية | فهم التوزيع |
df.shape |
(صفوف، أعمدة) | أبعاد البيانات |
df.dtypes |
نوع بيانات كل عمود | التحقق من الأنواع |
6. خصائص DataFrame الأساسية
(1) مرجع سريع للخصائص
| الخاصية | نوع الإرجاع | الوصف | مثال |
|---|---|---|---|
df.shape |
tuple | (صفوف، أعمدة) | (5, 4) |
df.index |
Index | تسميات الصفوف | RangeIndex(0, 5) |
df.columns |
Index | أسماء الأعمدة | Index(['name', 'age', ...]) |
df.dtypes |
Series | نوع البيانات لكل عمود | name: object, age: int64 |
df.values |
ndarray | البيانات الأساسية | مصفوفة ثنائية الأبعاد |
df.ndim |
int | عدد الأبعاد | 2 |
df.size |
int | العدد الإجمالي للعناصر | 20 (5 صفوف × 4 أعمدة) |
df.T |
DataFrame | التبديل (Transpose) | تبديل الصفوف والأعمدة |
▶ مثال: نظرة عامة على الخصائص الأساسية (الصعوبة ⭐)
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [28, 34, 25],
'salary': [75000.0, 92000.0, 68000.0]
})
print(f"Shape: {df.shape}") # (3, 3)
print(f"Index: {df.index}") # RangeIndex(0, 3)
print(f"Columns: {df.columns}") # Index(['name', 'age', 'salary'])
print(f"Dtypes:\n{df.dtypes}")
print(f"Size: {df.size}") # 9
print(f"Ndim: {df.ndim}") # 2
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
(2) تحديد الأعمدة وإضافتها
▶ مثال: عمليات الأعمدة (الصعوبة ⭐)
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'age': [28, 34, 25],
'salary': [75000.0, 92000.0, 68000.0]
})
# تحديد عمود واحد → Series
print(type(df['name'])) # <class 'pandas.core.series.Series'>
# تحديد أعمدة متعددة → DataFrame
print(df[['name', 'salary']])
# إضافة عمود جديد
df['bonus'] = df['salary'] * 0.1
df['level'] = df['age'].apply(lambda x: 'Senior' if x >= 30 else 'Junior')
print(df)
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
(3) التبديل (Transpose)
▶ مثال: تبديل DataFrame (الصعوبة ⭐)
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
import pandas as pd
df = pd.DataFrame({
'Q1': [320, 280, 350],
'Q2': [410, 390, 420]
}, index=['Product A', 'Product B', 'Product C'])
print(df.T)
# Product A Product B Product C
# Q1 320 280 350
# Q2 410 390 420
> **الإخراج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً — قم بتثبيته محلياً (`pip install pandas`) لتتمكن من المتابعة. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas لديك.
7. مثال كامل: جدول منتجات التجارة الإلكترونية من البداية إلى النهاية
▶ مثال: إنشاء واستكشاف بيانات المنتج (الصعوبة ⭐⭐⭐)
> **الناتج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليّة قليلاً اعتماداً على إصدار pandas لديك.
import pandas as pd
import numpy as np
# ============================================
# مثال شامل: إنشاء واستكشاف جدول
# منتجات التجارة الإلكترونية
# ============================================
# 1. إنشاء إطار البيانات
products = pd.DataFrame({
'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',
'Mouse', 'Headset', 'Speaker'],
'category': ['Electronics', 'Electronics', 'Electronics',
'Electronics', 'Accessories', 'Accessories',
'Accessories', 'Accessories'],
'price': [999.99, 699.99, 349.99, 449.99, 79.99,
29.99, 149.99, 89.99],
'stock': [50, 120, 80, 35, 200, 300, 150, 180],
'rating': [4.7, 4.5, 4.3, 4.6, 4.2, 4.0, 4.4, 4.1]
})
# 2. نظرة عامة
print("=== نظرة عامة على كتالوج المنتجات ===")
print(f"المنتجات: {len(products)}")
print(f"الفئات: {products['category'].unique().tolist()}")
print(f"الأعمدة: {products.columns.tolist()}")
# 3. أنواع البيانات والذاكرة
print(f"\n=== أنواع البيانات ===")
print(products.dtypes)
print(f"\nاستخدام الذاكرة: {products.memory_usage(deep=True).sum() / 1024:.1f} كيلوبايت")
# 4. إحصائيات سريعة
print(f"\n=== إحصائيات الأسعار ===")
print(products['price'].describe())
# 5. قيمة المخزون لكل منتج
products['inventory_value'] = products['price'] * products['stock']
print(f"\n=== أعلى 3 من حيث قيمة المخزون ===")
print(products.nlargest(3, 'inventory_value')[['name', 'inventory_value']])
# 6. تفصيل حسب الفئة
print(f"\n=== ملخص الفئات ===")
cat_summary = products.groupby('category').agg(
count=('name', 'count'),
avg_price=('price', 'mean'),
total_stock=('stock', 'sum')
)
print(cat_summary)
> **الناتج:** قم بتشغيل هذا في بيئة Python محلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبتة مسبقاً — قم بتثبيتها محلياً (`pip install pandas`) للمتابعة. قد تختلف القيم الفعليّة قليلاً اعتماداً على إصدار pandas لديك.
الناتج المتوقع (مقتطف):
=== نظرة عامة على كتالوج المنتجات ===
المنتجات: 8
الفئات: ['Electronics', 'Accessories']
الأعمدة: ['name', 'category', 'price', 'stock', 'rating']
=== إحصائيات الأسعار ===
count 8.00
mean 349.99
std 339.32
min 29.99
max 999.99
=== أعلى 3 من حيث قيمة المخزون ===
name inventory_value
0 Laptop 49999.50
1 Phone 83998.80
3 Monitor 15749.65
=== ملخص الفئات ===
count avg_price total_stock
category
Accessories 4 87.24 830
Electronics 4 624.99 285
❓ أسئلة شائعة
0, 1, 2)، فإن استخدام df[0] غامض — يتعامل Pandas معه كاسم عمود، وليس كموضع. في هذه الحالة، استخدم df.iloc[:, 0] للوصول الوضعي أو df.loc[:, 0] للوصول القائم على التسميات. يُفضل استخدام أسماء أعمدة نصية لتجنب الالتباس.df['new_col'] = values (تُضاف في النهاية) أو df.insert(pos, 'new_col', values) (في موضع محدد). لإزالة عمود، استخدم df.drop('col', axis=1) أو del df['col']. يُرجع drop DataFrame جديدًا (الأصلي لا يتغير)، بينما يقوم del بالتعديل مباشرة.df.values يُرجع المصفوفة الأساسية NumPy ndarray ثنائية الأبعاد. إذا كان DataFrame يحتوي على أنواع مختلطة (مثل كائن + int64)، فإن نوع بيانات ndarray يُرقى إلى كائن، مما يؤدي إلى فقدان أداء المتجهات. بالنسبة لـ DataFrames الرقمية البحتة، يحتفظ values بنوع البيانات الرقمية.df.T أو df.transpose(). بعد إعادة الترتيب، تصبح الصفوف أعمدة والأعمدة صفوف. ملاحظة: إذا كان DataFrame الأصلي يحتوي على أنواع مختلطة، فإن جميع الأعمدة تصبح من نوع كائن بعد إعادة الترتيب (لأن ndarray تتطلب أنواعًا متجانسة).pd.read_csv() للتحميل من ملف.📖 ملخص
- DataFrame هو في الأساس مجموعة منظمة من السلسلات (Series) — كل عمود له نوع بيانات (dtype) مستقل، وجميعها تشارك نفس فهرس الصفوف (Row Index)
- فهرس الصفوف + الأعمدة يشكلان نظام تسمية ثنائي الأبعاد، مما يجعل البيانات وصفية ذاتياً
- طرق الإنشاء: قاموس (الأكثر شيوعاً) / قائمة قوائم / قائمة قواميس / ndarray / read_csv
- ثلاثية استكشاف البيانات: head() للتنسيق ← info() للهيكل ← describe() للتوزيع
- الخصائص الأساسية: shape / index / columns / dtypes / values / T
- اختيار الأعمدة:
df['col']يُعيد سلسلة (Series)،df[['c1','c2']]يُعيد DataFrame - إضافة أعمدة بـ
df['new'] = ...، وإزالة أعمدة بـdf.drop('col', axis=1)
📝 تمارين
- أساسي (مستع الصعوبة ⭐): إنشاء جدول طلاب (الاسم / الرياضيات / الإنجليزي / العلوم) باستخدام 3 طرق مختلفة، ثم اطبع المعلومات وصف النتائج.
- متوسط (مستع الصعوبة ⭐⭐): إنشاء جدول موظفين مع قيم مفقودة (الاسم / العمر / الراتب / القسم، حيث يوجد 2 إدخالات NaN في الراتب)، ثم: استخدم info للتحقق من القيم المفقودة → حاسب النسبة غير الفارغة لكل عمود → أضف عمود salary_level (الراتب > 80000 يكون "High"، وإلا "Low"، NaN يكون "Unknown").
- تحدٍّ (مستع الصعوبة ⭐⭐⭐): بناء DataFrame من قائمة القواميس (5 سجلات، بعض المفاتيح مفقودة)، ثم: تحقق من القيم المفقودة → املأها بالمتوسط/المن للعمود → عد الحقول غير الفارغة لكل صف → أضف عمود completeness (النسبة غير الفارغة)، وأخيرًا أصدر تقرير describe كاملًا.
← Previous: Introduction to Series · Next: The Index System →