فهم DataFrame وعرض أول الصفوف باستخدام pandas في بايثون للمبتدئين

فهم DataFrame وعرض أول الصفوف باستخدام pandas في بايثون

بعد أن تقرأ ملف CSV أو تنشئ جدول بيانات باستخدام مكتبة pandas، ستتعامل غالبًا مع كائن اسمه DataFrame. هذا الكائن هو قلب العمل في تحليل البيانات ببايثون؛ لأنه يمثل البيانات في شكل جدول من صفوف وأعمدة.

في هذا المقال ستتعلم كيف تفهم شكل DataFrame، وكيف تعرض أول الصفوف باستخدام head()، وآخر الصفوف باستخدام tail()، وكيف تعرف عدد الصفوف والأعمدة باستخدام shape، وتعرض أسماء الأعمدة باستخدام columns، وتفحص أنواع البيانات باستخدام dtypes وinfo().

هذا الدرس مهم جدًا قبل الدخول في تنظيف البيانات أو تحليلها؛ لأنك لا تستطيع تحليل جدول لا تفهم شكله، وأسماء أعمدته، وحجم بياناته، وأنواع القيم الموجودة فيه.

{alertInfo} الفكرة ببساطة: قبل أن تبدأ تحليل أي بيانات، افحص DataFrame أولًا: اعرض أول الصفوف، راجع أسماء الأعمدة، اعرف عدد الصفوف والأعمدة، وتأكد من أنواع البيانات.

{getToc} $title={محتوى المقال}

ما هو DataFrame في pandas؟

DataFrame هو جدول بيانات داخل مكتبة pandas. يمكنك تخيله مثل ورقة عمل في Excel: صفوف وأعمدة، وكل عمود له اسم، وكل صف يمثل سجلًا أو ملاحظة.

مثال بسيط على شكل البيانات:

index name age city score
0 Ali 22 Aden 88
1 Sara 25 Sanaa 91
2 Omar 20 Taiz 76

في هذا الجدول:

  • index هو ترقيم الصفوف الذي يستخدمه pandas.
  • name وage وcity وscore هي أسماء الأعمدة.
  • كل صف يمثل طالبًا واحدًا.
شرح مكونات DataFrame من صفوف وأعمدة وindex في pandas

إنشاء DataFrame بسيط للتجربة

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

import pandas as pd

data = {
    "name": ["Ali", "Sara", "Omar", "Mona", "Khaled"],
    "age": [22, 25, 20, 23, 24],
    "city": ["Aden", "Sanaa", "Taiz", "Aden", "Hadramout"],
    "score": [88, 91, 76, 95, 82]
}

df = pd.DataFrame(data)

print(df)

الناتج سيكون قريبًا من هذا الشكل:

     name  age       city  score
0     Ali   22       Aden     88
1    Sara   25      Sanaa     91
2    Omar   20       Taiz     76
3    Mona   23       Aden     95
4  Khaled   24  Hadramout     82

لاحظ أن pandas أضاف أرقامًا في يسار الجدول تبدأ من 0. هذه الأرقام هي index، وهي تساعدك على تحديد الصفوف.

لماذا لا نطبع كل البيانات دائمًا؟

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

لذلك نستخدم أدوات فحص سريعة مثل:

  • head() لعرض أول الصفوف.
  • tail() لعرض آخر الصفوف.
  • shape لمعرفة حجم البيانات.
  • columns لمعرفة أسماء الأعمدة.
  • info() لفحص ملخص عام.

عرض أول الصفوف باستخدام head

الدالة head() تعرض أول 5 صفوف من DataFrame بشكل افتراضي. وهي من أول الأوامر التي تستخدمها بعد قراءة البيانات.

print(df.head())

الناتج:

     name  age       city  score
0     Ali   22       Aden     88
1    Sara   25      Sanaa     91
2    Omar   20       Taiz     76
3    Mona   23       Aden     95
4  Khaled   24  Hadramout     82

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

يمكنك أيضًا تحديد عدد الصفوف التي تريد عرضها:

print(df.head(3))

الناتج:

   name  age   city  score
0   Ali   22   Aden     88
1  Sara   25  Sanaa     91
2  Omar   20   Taiz     76
{alertInfo} استخدم head() عندما تريد نظرة سريعة على شكل البيانات، أسماء الأعمدة، وطبيعة القيم الموجودة في الصفوف الأولى.

عرض آخر الصفوف باستخدام tail

الدالة tail() تشبه head()، لكنها تعرض آخر الصفوف بدل أول الصفوف.

print(df.tail())

ويمكنك تحديد عدد الصفوف:

print(df.tail(2))

الناتج:

     name  age       city  score
3    Mona   23       Aden     95
4  Khaled   24  Hadramout     82

استخدام tail() مفيد عندما تريد التأكد من أن آخر البيانات ظهرت بشكل صحيح، خصوصًا عند قراءة ملفات طويلة.

استخدام head وtail لعرض أول وآخر الصفوف في pandas

معرفة عدد الصفوف والأعمدة باستخدام shape

الخاصية shape تعرض حجم DataFrame في شكل زوج من الأرقام:

print(df.shape)

الناتج:

(5, 4)

هذا يعني أن الجدول يحتوي على:

  • 5 صفوف.
  • 4 أعمدة.

يمكنك استخراج الرقمين بشكل منفصل:

rows, columns = df.shape

print("عدد الصفوف:", rows)
print("عدد الأعمدة:", columns)

الناتج:

عدد الصفوف: 5
عدد الأعمدة: 4

عرض أسماء الأعمدة باستخدام columns

لمعرفة أسماء الأعمدة الموجودة في DataFrame، نستخدم columns.

print(df.columns)

الناتج قد يظهر بهذا الشكل:

Index(['name', 'age', 'city', 'score'], dtype='object')

إذا أردت عرض أسماء الأعمدة كقائمة عادية أوضح للمبتدئ، استخدم list():

print(list(df.columns))

الناتج:

['name', 'age', 'city', 'score']

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

اختيار عمود واحد من DataFrame

بعد معرفة أسماء الأعمدة، يمكنك اختيار عمود واحد باستخدام اسمه بين أقواس مربعة.

print(df["name"])

الناتج:

0       Ali
1      Sara
2      Omar
3      Mona
4    Khaled
Name: name, dtype: object

ولاختيار عمود الدرجات:

print(df["score"])

إذا كتبت اسم عمود غير موجود، سيظهر غالبًا خطأ KeyError، لذلك افحص أسماء الأعمدة قبل الاختيار.

عرض أنواع البيانات باستخدام dtypes

الخاصية dtypes تعرض نوع البيانات في كل عمود. هذا مهم جدًا لأن بعض الأعمدة قد تبدو رقمية لكنها تُقرأ كنصوص، وهذا يسبب مشاكل لاحقًا في الحسابات.

print(df.dtypes)

الناتج:

name     object
age       int64
city     object
score     int64
dtype: object

في هذا الناتج:

  • object يعني غالبًا نصوصًا.
  • int64 يعني أعدادًا صحيحة.
  • قد ترى float64 إذا كان العمود يحتوي على أرقام عشرية.

فحص ملخص البيانات باستخدام info

الدالة info() تعطيك ملخصًا مهمًا عن DataFrame، مثل عدد الصفوف، أسماء الأعمدة، عدد القيم غير الفارغة، ونوع كل عمود.

df.info()

قد يظهر ناتج مشابه لهذا:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   name    5 non-null      object
 1   age     5 non-null      int64 
 2   city    5 non-null      object
 3   score   5 non-null      int64 
dtypes: int64(2), object(2)

هذا الملخص مفيد لأنك تستطيع منه معرفة:

  • عدد الصفوف في الجدول.
  • عدد الأعمدة.
  • أسماء الأعمدة.
  • عدد القيم غير الفارغة في كل عمود.
  • نوع البيانات في كل عمود.
معرفة عدد الصفوف والأعمدة وأنواع البيانات في DataFrame

الفرق بين head وshape وcolumns وinfo

كل أمر من هذه الأوامر له وظيفة مختلفة. لا تستخدمها بشكل عشوائي؛ استخدم كل واحد عندما تحتاج إلى نوع معين من المعلومات.

الأمر ماذا يعطيك؟ متى تستخدمه؟
df.head() أول 5 صفوف افتراضيًا لرؤية شكل البيانات بسرعة
df.tail() آخر 5 صفوف افتراضيًا للتأكد من نهاية البيانات
df.shape عدد الصفوف والأعمدة لمعرفة حجم الجدول
df.columns أسماء الأعمدة قبل اختيار الأعمدة أو إعادة تسميتها
df.dtypes نوع البيانات في كل عمود قبل الحسابات والتنظيف
df.info() ملخص شامل عن الأعمدة والقيم غير الفارغة والأنواع في بداية فحص أي ملف بيانات

مثال عملي: فحص ملف CSV بعد قراءته

في الدرس السابق تعلمت قراءة ملف CSV باستخدام read_csv(). الآن سنستخدم نفس الفكرة، ثم نفحص البيانات مباشرة.

import pandas as pd

df = pd.read_csv("students.csv")

print("أول الصفوف:")
print(df.head())

print("\nحجم البيانات:")
print(df.shape)

print("\nأسماء الأعمدة:")
print(list(df.columns))

print("\nأنواع البيانات:")
print(df.dtypes)

print("\nمعلومات عامة:")
df.info()

هذا الكود يصلح كقالب أولي تستخدمه في بداية أي مشروع تحليل بيانات صغير. قبل أن تنظف البيانات أو تحللها، شغّل هذه الأوامر وافهم الجدول.

كيف تقرأ نتيجة الفحص؟

عندما تنظر إلى نتيجة الفحص، اسأل نفسك هذه الأسئلة:

  • هل أسماء الأعمدة واضحة؟
  • هل عدد الصفوف منطقي؟
  • هل عدد الأعمدة كما توقعت؟
  • هل الأعمدة الرقمية ظهرت كأرقام فعلًا؟
  • هل توجد قيم فارغة في بعض الأعمدة؟
  • هل أول الصفوف تبدو صحيحة أم أن هناك مشكلة في القراءة؟

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

أخطاء شائعة عند فحص DataFrame

1. نسيان الأقواس مع head

الخطأ:

print(df.head)

هذا يطبع معلومات عن الدالة نفسها، وليس أول الصفوف. الصحيح:

print(df.head())

2. استخدام أقواس مع shape

shape خاصية وليست دالة، لذلك لا نكتبها بهذا الشكل:

print(df.shape())

الصحيح:

print(df.shape)

3. كتابة اسم عمود غير موجود

الخطأ:

print(df["Score"])

إذا كان اسم العمود الحقيقي هو score بحرف صغير، فسيظهر خطأ KeyError. لذلك افحص الأعمدة:

print(list(df.columns))

4. تجاهل أنواع البيانات

قد يكون عمود السعر أو الدرجة ظاهرًا كرقم، لكنه مخزن كنص. لذلك افحص dtypes قبل الحسابات:

print(df.dtypes)
أخطاء شائعة عند فحص DataFrame في pandas للمبتدئين

قالب سريع لفحص أي DataFrame

احتفظ بهذا القالب واستخدمه في بداية أي درس أو مشروع تحليل بيانات:

import pandas as pd

df = pd.read_csv("data.csv")

print("أول 5 صفوف:")
print(df.head())

print("\nآخر 5 صفوف:")
print(df.tail())

print("\nحجم البيانات:")
print(df.shape)

print("\nأسماء الأعمدة:")
print(list(df.columns))

print("\nأنواع البيانات:")
print(df.dtypes)

print("\nمعلومات عامة:")
df.info()

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

لماذا هذا الدرس مهم لمسار الذكاء الاصطناعي؟

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

لا تبدأ مباشرة في النماذج والخوارزميات قبل أن تعرف كيف تقرأ الجدول وتفهمه. كثير من مشاكل الذكاء الاصطناعي تبدأ من بيانات غير مفهومة أو غير نظيفة.

روابط داخلية مفيدة من بايثون العرب

مصادر خارجية مفيدة

الخلاصة

DataFrame هو الشكل الأساسي للبيانات الجدولية داخل pandas. عندما تقرأ ملف CSV أو تنشئ جدولًا داخل بايثون، فأنت غالبًا تتعامل مع DataFrame.

تعلمت في هذا الدرس كيف تعرض أول الصفوف باستخدام head()، وآخر الصفوف باستخدام tail()، وكيف تعرف حجم البيانات باستخدام shape، وأسماء الأعمدة باستخدام columns، وأنواع البيانات باستخدام dtypes، وملخص الجدول باستخدام info().

{alertSuccess} القاعدة المهمة: لا تبدأ تنظيف البيانات أو تحليلها قبل أن تفهم شكل DataFrame أولًا. افحص الصفوف، الأعمدة، الحجم، وأنواع البيانات، ثم انتقل للخطوة التالية.

أسئلة شائعة

ما معنى DataFrame في pandas؟

DataFrame هو جدول بيانات داخل مكتبة pandas، يتكون من صفوف وأعمدة، ويستخدم بكثرة في تحليل البيانات ببايثون.

ما الفرق بين head وtail؟

head() تعرض أول الصفوف من الجدول، بينما tail() تعرض آخر الصفوف. افتراضيًا يعرض كل منهما 5 صفوف.

هل shape دالة أم خاصية؟

shape خاصية وليست دالة، لذلك نكتب df.shape بدون أقواس.

كيف أعرف أسماء الأعمدة في DataFrame؟

استخدم df.columns، وإذا أردت عرضها كقائمة واضحة استخدم list(df.columns).

لماذا أحتاج إلى dtypes؟

لأنها تعرض نوع البيانات في كل عمود. هذا مهم قبل الحسابات؛ فقد يكون العمود ظاهرًا كرقم لكنه مخزن كنص.

ما أفضل أمر أبدأ به عند فحص البيانات؟

ابدأ غالبًا بـ df.head() لرؤية أول الصفوف، ثم استخدم df.shape وdf.columns وdf.info() لفهم الجدول بشكل أفضل.

إرسال تعليق

أحدث أقدم