شارك المقالة
شرح مكتبة Pandas في Python: تنظيف CSV وتحليل البيانات

شرح مكتبة Pandas في Python: تنظيف CSV وتحليل البيانات

شرح عملي لمكتبة Pandas في Python باستخدام DataFrame وقراءة CSV وتنظيف القيم المفقودة وتحويل الأعمدة وتجميع المبيعات وحفظ النتائج.

شرح مكتبة 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 اختار الترميز الصحيح. للملفات الكبيرة راجع الأعمدة التي تحتاجها وإمكان القراءة على أجزاء، لكن تذكر أن تجميع كل جزء وحده يحتاج تجميع النتائج الجزئية مجددًا. اختبر المنهج أولًا على ملف صغير له نتيجة إجمالية معروفة.

لماذا نفحص نوع العمود؟

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

المراجع

دروس Pandas الرسمية

الصور والفيديو من الشرح السابق

الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.

كيفية تكوين dictionary باستخدام pandas في بايثون كيفية عمل counter داخل pandas في python كيفية تمرير dictionary داخل pandas في python كيفية طباعة حجم القاموس وبعض العناصر من داخل pandas مجموعة من الاكواد والخصائص في مكتبة pandas python كيفية انشاء table باستخدام pandas بايثون
شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع