تثبيت بانداس وجدولك الأول
لا يأتي بانداس مدمجاً مع بايثون. إنشاء بيئة افتراضية، والتثبيت باستخدام pip، والتحقق منه، وبناء أول DataFrame بيدك.
- 1المشكلة
- 2الفهم
- 3أمثلة محلولة
- 4التوقع
- 5التطبيق
- 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). وهي في حقيقتها مجرد مجلد عادي داخل مشروعك يحتوي على الحزم الخاصة بذلك المشروع فقط. وإذا حذفت المشروع، تُحذف معه حزمه، بينما تظل بيئة بايثون الأساسية على جهازك نظيفة ومنظمة.
في الطرفية، وأنت داخل مجلد مشاريعك:
cd D:\python-lab
mkdir pandas-lab
cd pandas-lab
python -m venv .venvالآن قم بتفعيل البيئة:
.venv\Scripts\activateبمجرد تفعيلها، سيظهر اسم البيئة بين قوسين في بداية سطر الأوامر:
(.venv) PS D:\python-lab\pandas-lab>ظهور(.venv)هو النقطة الفاصلة. إذا لم تشاهدها، فأنت لست داخل البيئة الافتراضية، وأمرpip installسيقوم بتثبيت الحزمة في مكان آخر. تذكر أنك تحتاج لتشغيل أمرactivateفي كل نافذة طرفية جديدة تفتحها — فهذا ليس إعداداً تضبطه مرة واحدة للأبد.
إذا ظهرت لك رسالة خطأ في PowerShell تفيد بأن تشغيل النصوص البرمجية (scripts) معطل، نفّذ هذا الأمر مرة واحدة:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedللخروج من البيئة الافتراضية، اكتب deactivate.
التثبيت ثم التحقق
pip install pandasبعد بضع ثوانٍ ستكتمل العملية برسالة Successfully installed .... ستلاحظ أن مكتبة NumPy تم تنزيلها تلقائياً إلى جانب بانداس — فمكتبة بانداس تعتمد على NumPy داخلياً، ويقوم pip بإدارة هذه الاعتماديات وتنزيلها نيابة عنك.
الآن حان وقت التحقق. أنشئ ملفاً باسم check.py:
import pandas as pd
print(pd.__version__)2.2.3قد يختلف رقم الإصدار لديك، وهذا أمر طبيعي تماماً. المهم هو طباعة رقم إصدار، مما يعني أن بايثون عثر على مكتبة بانداس بنجاح.
ملاحظتان حول سطر import pandas as pd: التعليمة import pandas تستورد المكتبة، و as pd تمنحها اسماً مختصراً. التسمية pd ليست إلزامية تقنياً، لكن جميع مبرمجي بانداس في العالم تقريباً يتبعون هذا العرف — لذا فإن استخدام اسم آخر سيجعل قراءة الكود أصعب على الآخرين. التزم دائماً بهذا العرف.
مثال تطبيقي متكامل
first_frame.py:
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)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) — وهذه قاعدة محورية في بانداس، وستكون الموضوع الأساسي للفصل القادم.
الآن بعد أن أصبح الجدول بين يديك، أصبح استخراج المعلومات منه سهلاً للغاية:
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())(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..
Step 4 of 6 — Predict
Check your understanding
ما الذي سيطبعه shape، وما هو ترتيب الرقمين؟
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)- A(3, 3)
- B(3,)
- C(3, 4)
- D3 rows, 3 columns
ماذا يعني ظهور (.venv) في بداية سطر الأوامر (البرومبت)؟
- Aالبيئة الافتراضية مفعّلة في هذه الطرفية — سيقوم `pip install` الآن بالتثبيت داخل مجلد هذا المشروع
- Bاكتمل تثبيت بانداس
- Cأنت تقف حالياً داخل المجلد المسمى `.venv`
- Dبايثون يعمل في وضع آمن خاص
نجح أمر pip install pandas، ولكن في اليوم التالي عند فتح طرفية جديدة وتشغيل الملف نفسه يظهر ModuleNotFoundError: No module named 'pandas'. ما هو السبب الأكثر ترجيحاً؟
- Aلم يتم تفعيل البيئة الافتراضية في الطرفية الجديدة، لذا يتم تشغيل نسخة بايثون مختلفة — لا تحتوي على بانداس
- Bفشلت عملية التثبيت في الواقع
- Cتُحذف الحزم المثبتة عند إيقاف تشغيل الجهاز
- Dالملف يحتوي على `import pandas` بدلاً من `import pandas as pd`
Answering needs an account
Sign in to check your answers
The questions are above, and working them out in your head is the part that matters. Sign in to see the answers, the explanations and the three-level hints.
دورك الآن
أنشئ مجلداً جديداً، وأنشئ بداخله بيئة افتراضية خاصة بك وثبّت مكتبة بانداس، ثم اكتب ملفاً باسم stock.py يحتوي على ما يلي:
- كائن
DataFrameيحتوي على أربعة منتجات على الأقل وثلاثة أعمدة — عمود نصي، وعمود أعداد صحيحة، وعمود أعداد عشرية - طباعة الجدول بالكامل
- طباعة
shapeلعرض عدد الصفوف والأعمدة - طباعة مجموع كِلا العمودين الرقميين
بعد ذلك، تسبّب في حدوث الخطأ عمداً: اكتب deactivate في الطرفية للخروج من البيئة الافتراضية وشغّل الملف مرة أخرى. ما هو الخطأ الذي ظهر لك، وماذا يخبرك تحديداً؟
لا تتخطَّ هذه الخطوة الأخيرة أبداً. ستصادف خطأ ModuleNotFoundError عدة مرات في مسيرتك، ومواجهته وفهمه عمداً اليوم يجعلك تدرك سببه وتصلحه في ثوانٍ معدودة في المرات القادمة.
Step 6 of 6
التحدي — the chapter quiz
عشرة أسئلة متدرجة من السهل إلى الصعب. الأسئلة الأخيرة صعبة عن قصد.
Sign in to take the quiz