الفحص الأساسي لـ DataFrame
استخدم head() وtail() وinfo() وdescribe() وshape لفهم محتوى أي DataFrame وبنيته بسرعة.
الفحص الأساسي لـ DataFrame درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
الخطوات الخمس الأولى مع أي DataFrame
عند تحميل مجموعة بيانات جديدة، توفر سلسلة فحص منهجية ساعات من تصحيح الأخطاء. وتشمل أدوات Pandas لذلك: head() لرؤية الصفوف الأولى، وtail() للصفوف الأخيرة، وinfo() لمعرفة أنواع الأعمدة والقيم الفارغة، وdescribe() للإحصاءات، وshape لمعرفة الأبعاد. يستغرق تنفيذ هذه الفحوصات الخمسة أقل من دقيقة، ويكشف معظم مشكلات جودة البيانات فورًا.
import pandas as pd
# Assume df is loaded from a CSV
print(df.shape) # (rows, cols)
df.head() # first 5 rows
df.info() # dtypes + non-null counts
df.describe() # statisticshead() وtail()
تعيد df.head(n) أول n صفوف (والعدد الافتراضي 5) في صورة DataFrame. وتعيد df.tail(n) آخر n صفوف. ويساعد استخدامهما معًا على التحقق من تحليل البيانات بصورة صحيحة، وذلك بفحص وجود أسماء الأعمدة في صف العناوين، واحتواء الأعمدة الرقمية على أرقام، وعدم تفسير السلاسل التاريخية تفسيرًا خاطئًا. وهما لا تغيّران البيانات وتعيدان DataFrames جديدة.
import pandas as pd
df = pd.DataFrame({'a': range(20), 'b': range(20, 40)})
print(df.head(3))
# a b
# 0 0 20
# 1 1 21
# 2 2 22
print(df.tail(2))
# a b
# 18 18 38
# 19 19 39info(): الأنواع وأعداد القيم غير الفارغة
تطبع df.info() ملخصًا موجزًا يتضمن نوع بيانات الفهرس، وعدد القيم غير الفارغة في كل عمود، ونوع بيانات كل عمود، وإجمالي استخدام الذاكرة. تحتوي الأعمدة التي يقل فيها عدد القيم غير الفارغة عن إجمالي عدد الصفوف على بيانات مفقودة. وغالبًا ما يعني نوع البيانات object أن العمود نصي (أو متعدد الأنواع)، وقد يحتاج إلى تنظيف قبل التحليل.
import pandas as pd
import numpy as np
df = pd.DataFrame({'name': ['A', 'B', None],
'score': [80.0, np.nan, 90.0],
'grade': ['A', 'C', 'A']})
df.info()
# Column Non-Null Count Dtype
# name 2 non-null object
# score 2 non-null float64
# grade 3 non-null objectdescribe(): الملخص الإحصائي
تحسب df.describe() العدد، والمتوسط، والانحراف المعياري، والحد الأدنى، والمئين 25، والوسيط (المئين 50)، والمئين 75، والحد الأقصى لجميع الأعمدة الرقمية. مرّروا include='all' لتلخيص أعمدة object (النصية) أيضًا. ومرّروا include='object' لتلخيص الأعمدة الفئوية فقط. ويكون الناتج نفسه DataFrame، لذا يمكنكم حفظه أو تنسيقه لتقرير.
import pandas as pd
df = pd.DataFrame({'age': [25, 30, 35, 40], 'score': [88, 72, 91, 65]})
print(df.describe().round(1))
# age score
# count 4.0 4.0
# mean 32.5 79.0
# std 6.5 12.0shape وndim وsize
df.shape عبارة عن صف (nrows, ncols). وتعيد df.ndim دائمًا القيمة 2 في DataFrames. أما df.size فهي العدد الإجمالي للخلايا. استخدموا len(df) لمعرفة عدد الصفوف (وهو نفسه df.shape[0]). وهذه أبسط فحوصات سلامة البيانات؛ فتحققوا من عدد الصفوف المتوقع بعد التحميل وبعد كل خطوة تصفية.
import pandas as pd
df = pd.DataFrame({'x': range(100), 'y': range(100), 'z': range(100)})
print(df.shape) # (100, 3)
print(len(df)) # 100
print(df.size) # 300
print(df.ndim) # 2dtypes وselect_dtypes()
تعيد df.dtypes Series تربط اسم كل عمود بنوع بياناته. وتعيد df.select_dtypes(include='number') DataFrame جديدًا يحتوي على الأعمدة الرقمية فقط، وهو مفيد لحساب الارتباطات أو تطبيق التحويلات الرقمية من دون تشغيلها بالخطأ على أعمدة نصية. مرّروا exclude='object' لاستبعاد أعمدة النصوص.
import pandas as pd
df = pd.DataFrame({'a': [1,2], 'b': [1.0,2.0], 'c': ['x','y']})
print(df.dtypes)
# a int64
# b float64
# c object
numeric = df.select_dtypes(include='number')
print(numeric.columns.tolist()) # ['a', 'b']isnull() وأعداد القيم الفارغة
تعطي df.isnull().sum() عدد القيم المفقودة في كل عمود، وهي أسرع طريقة لمعرفة الأعمدة التي تحتاج إلى تنظيف. اقسموا الناتج على len(df) للحصول على نسبة القيم المفقودة. غالبًا ما يحتاج العمود الذي تزيد نسبة القيم المفقودة فيه على 50% إلى معالجة خاصة: إما حذفه أو تطبيق تعويض خاص بالمجال.
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, np.nan, 3], 'b': [np.nan, np.nan, 6]})
print(df.isnull().sum())
# a 1
# b 2
print((df.isnull().sum() / len(df)).round(2))
# a 0.33
# b 0.67value_counts() على عمود في DataFrame
يسرد استدعاء df['col'].value_counts() تكرار كل قيمة فريدة في ذلك العمود، مرتبًا حسب العدد. أضيفوا normalize=True للحصول على النسب المئوية. استخدموا dropna=False لعدّ NaN بوصفها فئة أيضًا. وهذه أسرع طريقة للتحقق من عدم توازن الفئات أو وجود قيم غير متوقعة في عمود فئوي.
import pandas as pd
df = pd.DataFrame({'status': ['active','inactive','active','active','banned']})
print(df['status'].value_counts())
# active 3
# inactive 1
# banned 1
print(df['status'].value_counts(normalize=True).round(2))فحص columns وindex
تعطي df.columns.tolist() قائمة Python عادية بأسماء الأعمدة، وهي مفيدة للمعالجة البرمجية أو التسجيل. ويعرض df.index تسميات الصفوف ونوعها. افحصوا df.index.is_unique للتأكد من عدم وجود تسميات صفوف مكررة، وهو شرط أساسي للعديد من عمليات الدمج وحسابات السلاسل الزمنية.
import pandas as pd
df = pd.DataFrame({'a': [1,2,3]}, index=['x', 'y', 'z'])
print(df.columns.tolist()) # ['a']
print(df.index.tolist()) # ['x', 'y', 'z']
print(df.index.is_unique) # Truesample() للفحص العشوائي
تعيد df.sample(n) عدد n من الصفوف المختارة عشوائيًا من دون تكرار. وتعيد df.sample(frac=0.1) نسبة 10% من الصفوف. عيّنوا random_state= لضمان إمكانية تكرار النتائج. ويكون أخذ عينات عشوائية أفضل من head() لاكتشاف المشكلات الموجودة في منتصف مجموعة بيانات كبيرة، والتي قد لا تظهر في الصفوف الأولى.
import pandas as pd
df = pd.DataFrame({'x': range(1000), 'y': range(1000)})
print(df.sample(3, random_state=42))
print(df.sample(frac=0.005, random_state=0)) # 0.5% of rowsmemory_usage() لتقدير حجم الذاكرة
تعيد df.memory_usage(deep=True) الذاكرة التي يستخدمها كل عمود بالبايت. ويفرض deep=True قياسًا دقيقًا لأعمدة نوع البيانات object التي توجد سلاسلها النصية خارج مخزن DataFrame. اجمعوا القيم للحصول على إجمالي الذاكرة. استخدموا ذلك قبل خفض أنواع البيانات وبعده للتأكد من تقليل استهلاك الذاكرة.
import pandas as pd
df = pd.DataFrame({'a': range(10000), 'b': [str(i) for i in range(10000)]})
usage = df.memory_usage(deep=True)
print(usage)
print('Total bytes:', usage.sum())تحقق سريع
اختبروا مدى فهمكم لفحص DataFrame الأساسي في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن head() وtail() يتيحان فحص بداية DataFrame ونهايته بصريًا، وأن info() يكشف أنواع البيانات وأعداد القيم المفقودة في استدعاء واحد، وأن describe() يوفر ملخصات إحصائية للأعمدة الرقمية. نحمّل بعد ذلك البيانات من أكثر تنسيقات الملفات شيوعًا — CSV وExcel وJSON — إلى DataFrames.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «الفحص الأساسي لـ DataFrame» مجاني؟
نعم — نص درس «الفحص الأساسي لـ DataFrame» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفحص الأساسي لـ DataFrame»؟
استخدم head() وtail() وinfo() وdescribe() وshape لفهم محتوى أي DataFrame وبنيته بسرعة. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «الفحص الأساسي لـ DataFrame»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء DataFrames
- اختيار الأعمدة والصفوف
- إضافة الأعمدة وإسقاطها
- الفحص الأساسي لـ DataFrame