شرح مكتبة Pandas في Python يصبح أوضح عندما نحل مشكلة صغيرة كاملة. لدينا جدول مبيعات يحتوي المنتج والسعر والكمية، ونريد حذف الصفوف غير الصالحة وحساب إجمالي كل منتج. سنستخدم DataFrame لتمثيل الجدول وSeries لتمثيل عمود، ثم نقرأ CSV وننظف الأرقام ونجمع النتائج. المثال يعمل ببيانات مكتوبة داخل النص حتى تستطيع تجربته دون تنزيل ملف مجهول أو إعداد قاعدة بيانات.
التجهيز والمتطلبات
python -m pip install pandasالفرق بين DataFrame وSeries
DataFrame جدول ذو صفوف وأعمدة، وليس مجرد قاموس عادي؛ يستطيع تخزين أنواع مختلفة بين الأعمدة. استخراج frame["price"] يعطي Series مرتبطة بفهرس الصفوف. قبل المعالجة نفحص وجود product وprice وquantity حتى لا تظهر رسالة KeyError غير واضحة لاحقًا. أسماء الأعمدة حساسة للمسافات والحروف، لذا راجع header إذا اختلف ملفك عن المثال. ويمكن عرض head وdtypes لفهم عينة البيانات وأنواعها قبل إجراء الحساب.
قراءة CSV وتحويل القيم
يستخدم المثال StringIO لقراءة نص CSV كملف في الذاكرة. في مشروعك يمكن استبداله بمسار ملف داخل read_csv. نستخدم to_numeric مع errors="coerce" لتحويل المدخلات غير الرقمية إلى قيم مفقودة بدل ترك أسعار نصية. بعد ذلك نحذف الصفوف الناقصة في الأعمدة اللازمة، ونستبعد السعر السالب والكمية غير الموجبة وفق قواعد هذا المثال. قد تكون المرتجعات السالبة صحيحة في نظام آخر؛ قواعد التنظيف يجب أن تتبع معنى البيانات.
المثال البرمجي الكامل
from io import StringIO
import pandas as pd
def analyze_sales(csv_text):
frame = pd.read_csv(StringIO(csv_text))
required = {"product", "price", "quantity"}
if not required.issubset(frame.columns):
raise ValueError("Missing product, price or quantity column")
for column in ["price", "quantity"]:
frame[column] = pd.to_numeric(frame[column], errors="coerce")
clean = frame.dropna(subset=["product", "price", "quantity"]).copy()
clean = clean.loc[(clean["price"] >= 0) & (clean["quantity"] > 0)].copy()
clean["total"] = clean["price"] * clean["quantity"]
summary = clean.groupby("product", as_index=False)["total"].sum()
return clean, summary
if __name__ == "__main__":
data = "product,price,quantity\nBook,10,2\nPen,3,4\nBook,10,1\nPen,,2\n"
clean, summary = analyze_sales(data)
print(clean)
print(summary)
summary.to_csv("sales-summary.csv", index=False, encoding="utf-8-sig")
التصفية والحساب والتجميع
نستخدم loc للتصفية وcopy قبل إضافة عمود جديد، فتكون النتيجة واضحة ومستقلة عن الجدول السابق. يحسب total بضرب السعر في الكمية لكل صف، ثم groupby يجمع إجمالي المبيعات لكل منتج. as_index=False يبقي اسم المنتج عمودًا في النتيجة. بالنسبة إلى بيانات المثال تكون مبيعات Book تساوي 30 وPen تساوي 12، بينما يحذف الصف الذي لا يحتوي سعرًا. قارن هذه القيم يدويًا قبل التعامل مع ملفات أكبر.
الحفظ وتوسيع التحليل
يشغل python pandas_sales.py البرنامج بعد حفظه بهذا الاسم، ويكتب sales-summary.csv دون عمود فهرس إضافي. اختيار utf-8-sig قد يساعد بعض برامج الجداول على التعرف على العربية؛ افحص البرنامج المستهدف. ستستبدل الكتابة الملف الموجود بالاسم نفسه، فاختر مسار نتيجة مستقلًا. في البيانات المالية راجع تمثيل الأعداد العشرية والتقريب، ولا تعتمد دقة float لكل الأغراض. يمكن لاحقًا إضافة تاريخ وتجميع شهري أو دمج جدول منتجات، بعد التأكد من سلامة الأعمدة الأساسية.
هل حذف القيم المفقودة مناسب دائمًا؟
لا. حذف صف ناقص السعر مناسب لقواعد هذا المثال لأننا لا نستطيع حساب إجماليه، لكنه قد يحذف بيانات مهمة في تحليل آخر. يمكن تعويض بعض القيم أو فصل الصفوف المرفوضة في تقرير للمراجعة، وفق معنى الحقل. لا تستبدل كل قيمة مفقودة بصفر تلقائيًا؛ صفر سعر صالح قد يعني هدية، بينما السعر المجهول معنى مختلف. احسب عدد الصفوف قبل التنظيف وبعده حتى تكتشف فقد نسبة غير متوقعة من البيانات.
كيف أقرأ ملفًا عربيًا أو كبيرًا؟
حدد encoding الصحيح وراجع الفاصل المستخدم؛ بعض الملفات تستعمل فاصلة منقوطة بدل الفاصلة. افحص أول صفوف وأسماء الأعمدة ولا تفترض أن ظهور العربية في المحرر يعني أن قارئ CSV اختار الترميز الصحيح. للملفات الكبيرة راجع الأعمدة التي تحتاجها وإمكان القراءة على أجزاء، لكن تذكر أن تجميع كل جزء وحده يحتاج تجميع النتائج الجزئية مجددًا. اختبر المنهج أولًا على ملف صغير له نتيجة إجمالية معروفة.
لماذا نفحص نوع العمود؟
قراءة أرقام تحتوي رموز عملة أو فواصل عشرية غير متوقعة قد تجعل العمود نصيًا أو تحول قيمًا إلى مفقودة. سجل الصفوف التي فشل تحويلها لتصحيح المصدر بدل الاكتفاء بجدول نظيف ظاهريًا. وإذا كانت الكمية يجب أن تكون عددًا صحيحًا فأضف قاعدة تحقق لذلك، فالمثال يسمح بأعداد موجبة عمومًا. قواعد الأنواع والوحدات جزء من التحليل، وليست مجرد تحسين لشكل الجدول المطبوع.
المراجع
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.







