بعد أن تقرأ ملف 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 بسيط للتجربة
حتى يكون الدرس واضحًا، سننشئ 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() مفيد عندما تريد التأكد من أن آخر البيانات ظهرت بشكل صحيح، خصوصًا عند قراءة ملفات طويلة.
معرفة عدد الصفوف والأعمدة باستخدام 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)
هذا الملخص مفيد لأنك تستطيع منه معرفة:
- عدد الصفوف في الجدول.
- عدد الأعمدة.
- أسماء الأعمدة.
- عدد القيم غير الفارغة في كل عمود.
- نوع البيانات في كل عمود.
الفرق بين 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
احتفظ بهذا القالب واستخدمه في بداية أي درس أو مشروع تحليل بيانات:
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 يساعدك لاحقًا عندما تبدأ في مشاريع تعلم الآلة.
لا تبدأ مباشرة في النماذج والخوارزميات قبل أن تعرف كيف تقرأ الجدول وتفهمه. كثير من مشاكل الذكاء الاصطناعي تبدأ من بيانات غير مفهومة أو غير نظيفة.
روابط داخلية مفيدة من بايثون العرب
- تحليل البيانات ببايثون للمبتدئين: من أين تبدأ؟
- أساسيات بايثون 30: التعامل مع ملفات CSV للمبتدئين
- قراءة ملفات CSV داخل مشروع بايثون بعد الأساسيات
- تعلم الذكاء الاصطناعي ببايثون من الصفر
- كورس أساسيات بايثون للمبتدئين
مصادر خارجية مفيدة
الخلاصة
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() لفهم الجدول بشكل أفضل.



