الفصل 01

تثبيت بانداس وجدولك الأول

لا يأتي بانداس مدمجاً مع بايثون. إنشاء بيئة افتراضية، والتثبيت باستخدام pip، والتحقق منه، وبناء أول DataFrame بيدك.

25 دقيقةPython 3.12
  1. 1المشكلة
  2. 2الفهم
  3. 3أمثلة محلولة
  4. 4التوقع
  5. 5التطبيق
  6. 6التحدي

المشكلة التي نقوم بحلها

توجد مبيعات متجر لثلاثة أشهر داخل ملف CSV يحتوي على اثني عشر ألف صف. والسؤال المطلوب بسيط للغاية: ما هو المنتج الأكثر مبيعاً؟

يمكنك حل هذا السؤال باستخدام أدوات بايثون الأساسية التي تعلمتها مسبقاً. تفتح الملف، وتقرأ كل سطر على حدة، وتفصل النصوص عند الفواصل، ثم تحولها إلى أرقام، وتجمعها واحداً تلو الآخر. سيتطلب ذلك نحو أربعين سطراً من التعليمات البرمجية، مع احتمالية ارتكاب خطأ عند كل خطوة.

أما في مكتبة بانداس (pandas)، فالأمر لا يتجاوز سطرين فقط. والسبب هو أن بانداس تمنح بايثون شيئاً لم يكن يمتلكه من قبل: الجدول (Table). حيث يتم الاحتفاظ بشبكة كاملة من الصفوف والأعمدة كقيمة برمجية واحدة، وتصبح عمليات الجمع والتصفية والترتيب مجرد عملية مفردة لكل منها.

ولكن هناك أمر يجب توضيحه أولاً: دوال مثل print و len و input تأتي مثبتة مسبقاً مع بايثون، بينما بانداس لا تأتي معه. يجب تثبيتها بشكل منفصل، وعدم إدراك أين يتم تثبيتها تحديداً هو ما يوقع الكثيرين من اليوم الأول في أخطاء يصعب تتبع أسبابها.

بنهاية هذا الفصل ستكون قادراً على

  • التمييز بين مكتبة بايثون القياسية والحزم الخارجية
  • إنشاء بيئة افتراضية (Virtual Environment) وتفعيلها لمشروعك
  • تثبيت بانداس باستخدام pip والتحقق من إصدارها
  • بناء جدول DataFrame الأول يدوياً وطباعته
  • قراءة خطأ ModuleNotFoundError وتحديد سببه بدقة

المتطلبات المسبقة: من دورة بايثون، الطرفية والمجلدات ومشروعك الأول والمتغيرات والأنواع.


بانداس ليست جزءاً مدمجاً في بايثون

ما يأتي مدمجاً ومثبتاً مسبقاً مع بايثون يُسمى المكتبة القياسية (Standard Library) — حيث توجد أدوات مثل print و len و math و random. أما بانداس فليست هناك، بل هي حزمة خارجية (outside package) طورها مبرمجون آخرون ونُشرت في مستودع رسمي يُدعى PyPI.

والأداة المسؤولة عن جلب هذه الحزم وتنزيلها هي pip، وهي تأتي بالفعل مع بايثون.

وهنا يظهر السؤال الأساسي، والذي يُسبب الكثير من المشاكل لاحقاً إذا تجاهلناه: أين يتم تثبيتها بالضبط؟

لماذا نحتاج إلى بيئة افتراضية؟

إذا كتبت في سطر الأوامر pip install pandas، فسيتم تثبيت بانداس في بيئة بايثون العامة على مستوى جهازك بالكامل. قد يعمل ذلك بشكل جيد لمشروع واحد، ولكن بعد ستة أشهر، عندما يحتاج مشروع ثانٍ إلى إصدار مختلف من بانداس، سيتنافس المشروعان على نفس المكان — وإصلاح أحدهما قد يعطل الآخر.

الحل يكمن في إنشاء مساحة معزولة لكل مشروع: بيئة افتراضية (virtual environment). وهي في حقيقتها مجرد مجلد عادي داخل مشروعك يحتوي على الحزم الخاصة بذلك المشروع فقط. وإذا حذفت المشروع، تُحذف معه حزمه، بينما تظل بيئة بايثون الأساسية على جهازك نظيفة ومنظمة.

في الطرفية، وأنت داخل مجلد مشاريعك:

text
cd D:\python-lab
mkdir pandas-lab
cd pandas-lab
python -m venv .venv

الآن قم بتفعيل البيئة:

text
.venv\Scripts\activate

بمجرد تفعيلها، سيظهر اسم البيئة بين قوسين في بداية سطر الأوامر:

text
(.venv) PS D:\python-lab\pandas-lab>
ظهور (.venv) هو النقطة الفاصلة. إذا لم تشاهدها، فأنت لست داخل البيئة الافتراضية، وأمر pip install سيقوم بتثبيت الحزمة في مكان آخر. تذكر أنك تحتاج لتشغيل أمر activate في كل نافذة طرفية جديدة تفتحها — فهذا ليس إعداداً تضبطه مرة واحدة للأبد.

إذا ظهرت لك رسالة خطأ في PowerShell تفيد بأن تشغيل النصوص البرمجية (scripts) معطل، نفّذ هذا الأمر مرة واحدة:

text
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

للخروج من البيئة الافتراضية، اكتب deactivate.

التثبيت ثم التحقق

text
pip install pandas

بعد بضع ثوانٍ ستكتمل العملية برسالة Successfully installed .... ستلاحظ أن مكتبة NumPy تم تنزيلها تلقائياً إلى جانب بانداس — فمكتبة بانداس تعتمد على NumPy داخلياً، ويقوم pip بإدارة هذه الاعتماديات وتنزيلها نيابة عنك.

الآن حان وقت التحقق. أنشئ ملفاً باسم check.py:

python
import pandas as pd

print(pd.__version__)
text
2.2.3

قد يختلف رقم الإصدار لديك، وهذا أمر طبيعي تماماً. المهم هو طباعة رقم إصدار، مما يعني أن بايثون عثر على مكتبة بانداس بنجاح.

ملاحظتان حول سطر import pandas as pd: التعليمة import pandas تستورد المكتبة، و as pd تمنحها اسماً مختصراً. التسمية pd ليست إلزامية تقنياً، لكن جميع مبرمجي بانداس في العالم تقريباً يتبعون هذا العرف — لذا فإن استخدام اسم آخر سيجعل قراءة الكود أصعب على الآخرين. التزم دائماً بهذا العرف.


مثال تطبيقي متكامل

first_frame.py:

python
import pandas as pd

# A DataFrame from a dictionary: each key is a column name,
# each list is that column's values, top to bottom.
sales = pd.DataFrame({
    "product": ["pen", "notebook", "bag"],
    "quantity": [12, 5, 2],
    "price": [15.0, 60.0, 850.0],
})

print(sales)
text
product  quantity  price
0       pen        12   15.0
1  notebook         5   60.0
2       bag         2  850.0

انظر جيداً إلى ما تمت طباعته، فكل جزء في المخرجات له أهمية كبيرة في الفصول القادمة.

في الأعلى تظهر أسماء الأعمدة — product و quantity و price. وعلى الجانب الأيسر تظهر الأرقام 0 و 1 و 2. هذه الأرقام ليست عموداً مستقلاً، بل هي الفهرس (Index)، أي تسميات الصفوف ومعرّفاتها. أنت لم تكتبها داخل القاموس، بل قام بانداس بتوليدها تلقائياً بدءاً من الصفر.

لاحظ أيضاً القيمة 15.0 في عمود price. لأنك كتبت 15.0، ظهر العمود بأكمله كأرقام عشرية، حتى وإن كانت 850.0 يمكن تمثيلها كعدد صحيح. كل القيم داخل العمود الواحد تتشارك نفس النوع (Type) — وهذه قاعدة محورية في بانداس، وستكون الموضوع الأساسي للفصل القادم.

الآن بعد أن أصبح الجدول بين يديك، أصبح استخراج المعلومات منه سهلاً للغاية:

python
import pandas as pd

sales = pd.DataFrame({
    "product": ["pen", "notebook", "bag"],
    "quantity": [12, 5, 2],
    "price": [15.0, 60.0, 850.0],
})

print(sales.shape)
print(sales["quantity"].sum())
text
(3, 3)
19

توضح الخاصية shape أبعاد الجدول — ثلاثة صفوف وثلاثة أعمدة، بهذا الترتيب. والتعليمة sales["quantity"].sum() تجمع كل القيم في عمود واحد. حتى لو احتوى الجدول على اثني عشر ألف صف، فسيظل هذا السطر البرمجي متطابقاً تماماً بدون أي تغيير، وهذا هو الدافع الأكبر لتعلم بانداس.


الأخطاء الشائعة وحلولها

خطأ ModuleNotFoundError: No module named 'pandas' لم يتمكن بايثون من العثور على بانداس. في معظم الحالات، يعني هذا أن المكان الذي ثُبّتت فيه المكتبة يختلف عن بيئة التشغيل الحالية. تأكد من وجود (.venv) في سطر الأوامر؛ وإذا لم تكن موجودة، فعّل البيئة عبر أمر activate وشغّل الكود مجدداً. وعندما تكون البيئة مفعلة، سيوضح لك أمر pip list ما إذا كانت بانداس مثبتة هناك بالفعل.

ظهور خطأ 'pip' is not recognized as an internal or external command أداة pip غير مضافة إلى مسار النظام PATH. اكتب بدلاً من ذلك python -m pip install pandas — فهذا يستدعي pip مباشرة من خلال نسخة بايثون قيد التشغيل، مما يجعله يعمل دون الحاجة إلى PATH ويضمن التثبيت في النسخة المقصودة تحديداً.

ظهور خطأ .venv\Scripts\activate : File cannot be loaded because running scripts is disabled هذه سياسة أمان افتراضية في PowerShell. نفّذ الأمر Set-ExecutionPolicy -Scope CurrentUser RemoteSigned مرة واحدة، ثم أعد المحاولة في نافذة طرفية جديدة.

كل شيء يعمل بنجاح، لكن محرر الأكواد يضع خطوطاً حمراء تحت الكود المحرر يستخدم في الغالب بيئة بايثون أخرى غير بيئة المشروع. في VS Code، اضغط على Ctrl + Shift + P ثم اختر Python: Select Interpreter وحدد البيئة الموجودة داخل مجلد .venv الخاص بالمشروع. ما دام البرنامج يعمل من الطرفية فالكود سليم تماماً، والخط الأحمر هو مجرد تنبيه غير دقيق من المحرر.

خطأ NameError عند كتابة DataFrame يجب كتابة pd.DataFrame وليس DataFrame بمفردها. التعليمة import pandas as pd تستورد المكتبة بالكامل تحت الاسم pd، وبالتالي فإن الوصول لأي عنصر بداخلها يتطلب كتابة اللاحقة pd..