قراءة ملف CSV باستخدام pandas من أهم الخطوات الأولى في تحليل البيانات ببايثون؛ لأن معظم البيانات التي ستتعامل معها في البداية تكون محفوظة في ملفات تشبه الجداول: صفوف، أعمدة، أسماء حقول، وقيم قابلة للفحص والتحليل.
في هذا الدرس ستتعلم كيف تجهز ملف CSV بسيطًا، وكيف تقرأه باستخدام الدالة read_csv()، ثم كيف تعرض أول الصفوف، وتعرف عدد الصفوف والأعمدة، وتعرض أسماء الأعمدة، وتحسب متوسط عمود رقمي، وتتعامل مع أشهر الأخطاء التي تظهر للمبتدئين.
إذا كنت جديدًا تمامًا في هذا المسار، يمكنك أولًا مراجعة دليل تحليل البيانات ببايثون للمبتدئين، وإذا أردت فهم ملفات CSV من ناحية أساسيات بايثون قبل استخدام pandas فراجع أيضًا درس التعامل مع ملفات CSV في كورس أساسيات بايثون.
{alertInfo} الفكرة ببساطة: الدالةread_csv()تقرأ ملفCSVوتحوله إلى جدول داخلpandasيسمىDataFrame، وبعدها تستطيع فحص البيانات وتحليلها بأوامر قصيرة وواضحة.
{getToc} $title={محتوى المقال}
ماذا ستتعلم في هذا الدرس؟
| المهارة | لماذا تحتاجها؟ |
|---|---|
فهم شكل ملف CSV |
حتى تعرف كيف تكون البيانات قبل قراءتها في بايثون. |
استخدام pd.read_csv() |
لقراءة الملف وتحويله إلى DataFrame. |
استخدام head() وshape وcolumns |
لفحص أول الصفوف، وحجم البيانات، وأسماء الأعمدة. |
| اختيار عمود وحساب المتوسط | لبدء أول خطوة تحليل بسيطة على البيانات. |
| حل أخطاء القراءة الشائعة | مثل خطأ عدم وجود الملف، مشكلة الترميز، أو ظهور البيانات في عمود واحد. |
ما هو ملف CSV؟
ملف CSV هو ملف نصي بسيط تُخزن فيه البيانات على شكل صفوف وأعمدة. غالبًا يكون الصف الأول هو أسماء الأعمدة، ثم تأتي البيانات في الصفوف التالية.
مثال على ملف CSV بسيط:
name,age,city,score
Ali,22,Aden,88
Sara,25,Sanaa,91
Omar,20,Taiz,76
Mona,23,Aden,95
Khaled,24,Hadramout,82
في هذا المثال لدينا أربعة أعمدة:
name: اسم الطالب.age: العمر.city: المدينة.score: الدرجة.
كل سطر بعد الصف الأول يمثل صفًا واحدًا من البيانات. لذلك عندما تقرأ هذا الملف باستخدام pandas سيظهر لك كجدول منظم يمكن فحصه وتحليله.
لماذا نستخدم pandas بدل القراءة اليدوية؟
يمكنك قراءة ملف نصي عادي باستخدام open()، لكن تحليل البيانات يحتاج أكثر من مجرد قراءة السطور. أنت تحتاج إلى اختيار أعمدة، تصفية صفوف، حساب متوسطات، معرفة القيم الفارغة، وفرز البيانات. هنا تظهر قوة مكتبة pandas.
| القراءة اليدوية | القراءة باستخدام pandas |
|---|---|
| تحتاج إلى قراءة السطور وتقسيم النصوص يدويًا. | تقرأ الملف بأمر واحد باستخدام read_csv(). |
| اختيار الأعمدة يحتاج كودًا أطول. | يمكن اختيار أي عمود باسمه مباشرة. |
| الحسابات تحتاج حلقات وشروطًا كثيرة. | يمكن حساب المتوسط والمجموع والوصف الإحصائي بدوال جاهزة. |
| فحص البيانات الكبيرة يصبح متعبًا. | يمكن استخدام head() وinfo() وdescribe() بسرعة. |
تثبيت pandas قبل قراءة الملف
قبل استخدام pandas، تأكد أن المكتبة مثبتة لديك. افتح نافذة الأوامر واكتب:
pip install pandas
وإذا كنت تستخدم أكثر من نسخة لبايثون على جهازك، فقد تحتاج إلى استخدام:
python -m pip install pandas
بعد التثبيت، نستورد المكتبة داخل ملف بايثون بهذا الشكل:
import pandas as pd
الاختصار pd هو الاختصار الشائع لمكتبة pandas، وستراه في أغلب الدروس والمشاريع.
{alertWarning}
إذا ظهر خطأ ModuleNotFoundError: No module named 'pandas'، فهذا يعني أن المكتبة غير مثبتة في البيئة التي تشغل منها الكود. ثبتها بالأمر السابق ثم شغل الملف مرة أخرى.
إنشاء ملف CSV للتجربة
أنشئ مجلدًا جديدًا للتجربة، ثم أنشئ بداخله ملفًا باسم:
students.csv
ضع داخل الملف البيانات التالية:
name,age,city,score
Ali,22,Aden,88
Sara,25,Sanaa,91
Omar,20,Taiz,76
Mona,23,Aden,95
Khaled,24,Hadramout,82
ثم أنشئ ملف بايثون باسم:
read_students.py
اجعل الملفين في نفس المجلد حتى تكون القراءة سهلة:
project-folder/
read_students.py
students.csv
{alertInfo} ملاحظة مهمة: إذا كنت تستخدم Notepad على ويندوز، تأكد أن اسم الملف أصبحstudents.csvوليسstudents.csv.txt؛ لأن هذا من أكثر أسباب خطأ عدم العثور على الملف.
قراءة ملف CSV باستخدام read_csv
اكتب الكود التالي داخل ملف read_students.py:
import pandas as pd
df = pd.read_csv("students.csv")
print(df)
في هذا الكود:
- استوردنا مكتبة
pandasبالاختصارpd. - قرأنا ملف
students.csvباستخدامpd.read_csv(). - خزنّا البيانات في متغير اسمه
df. - طبعنا الجدول الناتج باستخدام
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
الأرقام الموجودة في أقصى اليسار تسمى index. هذه الأرقام لم تكن موجودة في ملف CSV، لكن pandas يضيفها لترقيم الصفوف داخل DataFrame.
ما معنى DataFrame في pandas؟
DataFrame هو جدول بيانات داخل pandas. يمكنك تخيله مثل جدول في Excel، لكنه داخل بايثون ويمكن التعامل معه بالكود.
| العنصر | معناه داخل DataFrame |
|---|---|
| الصف | سجل واحد من البيانات، مثل بيانات طالب واحد. |
| العمود | نوع معلومة معين، مثل الاسم أو العمر أو الدرجة. |
الفهرس index |
ترقيم داخلي للصفوف يبدأ غالبًا من 0. |
| اسم العمود | العنوان الموجود في الصف الأول من ملف CSV. |
عرض أول الصفوف باستخدام head
عند التعامل مع ملف كبير، لا تطبع كل البيانات مرة واحدة. الأفضل أن تعرض أول عدة صفوف فقط باستخدام head().
import pandas as pd
df = pd.read_csv("students.csv")
print(df.head())
الدالة head() تعرض أول 5 صفوف بشكل افتراضي. ويمكنك تحديد عدد الصفوف التي تريدها:
print(df.head(3))
هذا السطر يعرض أول 3 صفوف فقط.
معرفة عدد الصفوف والأعمدة باستخدام shape
بعد قراءة البيانات، اسأل نفسك دائمًا: كم صفًا وكم عمودًا في الملف؟ نستخدم shape للإجابة على هذا السؤال.
import pandas as pd
df = pd.read_csv("students.csv")
print(df.shape)
الناتج:
(5, 4)
هذا يعني أن البيانات تحتوي على 5 صفوف و4 أعمدة.
عرض أسماء الأعمدة باستخدام columns
لمعرفة أسماء الأعمدة الموجودة في الملف، استخدم columns:
import pandas as pd
df = pd.read_csv("students.csv")
print(df.columns)
قد يظهر الناتج بهذا الشكل:
Index(['name', 'age', 'city', 'score'], dtype='object')
وإذا أردت عرض أسماء الأعمدة كقائمة أوضح، استخدم:
print(list(df.columns))
الناتج:
['name', 'age', 'city', 'score']
عرض معلومات عامة عن البيانات باستخدام info
الدالة info() تعطيك ملخصًا سريعًا عن البيانات: عدد الصفوف، أسماء الأعمدة، عدد القيم غير الفارغة، ونوع البيانات في كل عمود.
import pandas as pd
df = pd.read_csv("students.csv")
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)
هذا الملخص مهم قبل أي تحليل؛ لأنه يخبرك هل الأعمدة الرقمية ظهرت كأرقام فعلًا، وهل توجد قيم فارغة، وما نوع كل عمود.
اختيار عمود واحد من البيانات
يمكنك اختيار عمود واحد باستخدام اسمه بين أقواس مربعة. مثلًا لاختيار عمود الأسماء:
import pandas as pd
df = pd.read_csv("students.csv")
print(df["name"])
الناتج:
0 Ali
1 Sara
2 Omar
3 Mona
4 Khaled
Name: name, dtype: object
ولاختيار عمود الدرجات:
print(df["score"])
حساب متوسط الدرجات
بما أن عمود score يحتوي على أرقام، يمكننا حساب المتوسط باستخدام mean():
import pandas as pd
df = pd.read_csv("students.csv")
average_score = df["score"].mean()
print(average_score)
هذا المثال بسيط، لكنه يوضح فكرة مهمة: بعد قراءة ملف CSV وتحويله إلى DataFrame، تستطيع تنفيذ عمليات تحليلية على الأعمدة مباشرة.
تصفية البيانات حسب شرط
يمكنك عرض الطلاب الذين حصلوا على درجة أكبر من أو تساوي 85 بهذا الشكل:
import pandas as pd
df = pd.read_csv("students.csv")
high_scores = df[df["score"] >= 85]
print(high_scores)
الناتج:
name age city score
0 Ali 22 Aden 88
1 Sara 25 Sanaa 91
3 Mona 23 Aden 95
هذه خطوة صغيرة، لكنها بداية فعلية لتحليل البيانات؛ لأنك لم تعد تعرض الجدول فقط، بل بدأت تستخرج جزءًا محددًا منه حسب شرط.
قراءة ملف CSV من مجلد فرعي
إذا كان ملف CSV داخل مجلد فرعي اسمه data، فسيكون شكل المشروع مثل:
project-folder/
read_students.py
data/
students.csv
في هذه الحالة اكتب المسار بهذا الشكل:
import pandas as pd
df = pd.read_csv("data/students.csv")
print(df.head())
على ويندوز يمكنك غالبًا استخدام الشرطة المائلة للأمام / داخل المسار، وهي أسهل وأوضح للمبتدئين من الشرطة العكسية.
تحديد الفاصل sep عند الحاجة
ليس كل ملف شبيه بـ CSV يستخدم الفاصلة العادية ,. أحيانًا تكون البيانات مفصولة بفاصلة منقوطة ;، خصوصًا في بعض الملفات المصدرة من برامج الجداول.
مثال ملف مفصول بفاصلة منقوطة:
name;age;city;score
Ali;22;Aden;88
Sara;25;Sanaa;91
في هذه الحالة نستخدم المعامل sep:
import pandas as pd
df = pd.read_csv("students.csv", sep=";")
print(df.head())
إذا قرأت الملف ووجدت كل البيانات ظهرت داخل عمود واحد، فغالبًا المشكلة أن الفاصل المستخدم في الملف ليس فاصلة عادية.
مشكلة الترميز encoding مع اللغة العربية
إذا كان ملف CSV يحتوي على نص عربي وظهرت الحروف بشكل غريب، فقد تكون المشكلة في الترميز. جرّب قراءة الملف باستخدام encoding="utf-8":
import pandas as pd
df = pd.read_csv("students.csv", encoding="utf-8")
print(df.head())
وفي بعض الملفات المصدرة من Excel قد تحتاج إلى تجربة utf-8-sig:
df = pd.read_csv("students.csv", encoding="utf-8-sig")
{alertInfo} عند التعامل مع ملفات عربية، الأفضل أن تحفظ ملفCSVبترميزUTF-8حتى تقل مشاكل ظهور الحروف بشكل غير صحيح.
قراءة أعمدة محددة فقط باستخدام usecols
أحيانًا لا تحتاج إلى كل الأعمدة الموجودة في الملف. يمكنك قراءة أعمدة محددة فقط باستخدام usecols:
import pandas as pd
df = pd.read_csv("students.csv", usecols=["name", "score"])
print(df)
هذا مفيد عندما يكون الملف كبيرًا وتريد التركيز على أعمدة معينة فقط.
قراءة عدد محدود من الصفوف باستخدام nrows
إذا كان الملف كبيرًا جدًا وتريد تجربة سريعة، يمكنك قراءة أول عدد محدد من الصفوف باستخدام nrows:
import pandas as pd
df = pd.read_csv("students.csv", nrows=3)
print(df)
هذا يقرأ أول 3 صفوف فقط من الملف.
أخطاء شائعة عند استخدام read_csv
هذه أشهر المشاكل التي قد تظهر عند قراءة ملفات CSV باستخدام pandas، خصوصًا في بداية التعلم.
| المشكلة | السبب المحتمل | الحل السريع |
|---|---|---|
FileNotFoundError |
الملف غير موجود في المسار المكتوب. | تأكد من اسم الملف ومكانه، أو استخدم مسارًا صحيحًا مثل data/students.csv. |
ModuleNotFoundError |
مكتبة pandas غير مثبتة في البيئة الحالية. |
استخدم python -m pip install pandas. |
| كل البيانات ظهرت في عمود واحد | الفاصل داخل الملف ليس فاصلة عادية. | جرّب sep=";" أو افحص الفاصل المستخدم داخل الملف. |
| الحروف العربية ظهرت بشكل غير صحيح | مشكلة ترميز. | جرّب encoding="utf-8-sig". |
KeyError |
كتبت اسم عمود غير موجود أو مختلف في الملف. | اعرض أسماء الأعمدة باستخدام list(df.columns). |
1. خطأ FileNotFoundError
هذا الخطأ يعني أن بايثون لم يجد الملف في المسار الذي كتبته.
FileNotFoundError: [Errno 2] No such file or directory: 'students.csv'
الحل:
- تأكد أن اسم الملف مكتوب بشكل صحيح.
- تأكد أن الملف في نفس مجلد ملف بايثون.
- إذا كان الملف داخل مجلد فرعي، اكتب المسار الصحيح مثل
data/students.csv. - تأكد أن الملف ليس محفوظًا باسم
students.csv.txt.
2. ظهور كل البيانات في عمود واحد
إذا ظهر الجدول كله داخل عمود واحد، فقد يكون الفاصل داخل الملف ليس فاصلة ,. جرّب:
df = pd.read_csv("students.csv", sep=";")
3. ظهور الحروف العربية بشكل غريب
جرّب تحديد الترميز:
df = pd.read_csv("students.csv", encoding="utf-8-sig")
4. خطأ KeyError عند اختيار عمود
إذا كتبت اسم عمود غير موجود، سيظهر خطأ مثل KeyError. لذلك افحص أسماء الأعمدة أولًا:
print(list(df.columns))
انتبه أيضًا إلى المسافات الزائدة في أسماء الأعمدة. أحيانًا يكون اسم العمود " score" وليس "score".
الكود الكامل للدرس
هذا كود كامل يجمع أهم ما تعلمناه في الدرس:
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معلومات عامة عن البيانات:")
df.info()
print("\nمتوسط الدرجات:")
print(df["score"].mean())
print("\nالطلاب أصحاب الدرجات العالية:")
high_scores = df[df["score"] >= 85]
print(high_scores)
ملخص أوامر pandas التي استخدمناها
| الأمر | وظيفته |
|---|---|
import pandas as pd |
استيراد مكتبة pandas بالاختصار الشائع pd. |
pd.read_csv() |
قراءة ملف CSV وتحويله إلى DataFrame. |
df.head() |
عرض أول الصفوف من البيانات. |
df.shape |
معرفة عدد الصفوف والأعمدة. |
df.columns |
عرض أسماء الأعمدة. |
df.info() |
عرض ملخص عن الأعمدة وأنواع البيانات والقيم غير الفارغة. |
df["score"].mean() |
حساب متوسط عمود رقمي. |
df[df["score"] >= 85] |
تصفية الصفوف حسب شرط معين. |
sep |
تحديد الفاصل المستخدم داخل الملف. |
encoding |
تحديد ترميز الملف عند وجود نص عربي أو رموز غير ظاهرة بشكل صحيح. |
روابط داخلية مفيدة من بايثون العرب
- تحليل البيانات ببايثون للمبتدئين: من أين تبدأ؟
- أساسيات بايثون 30: التعامل مع ملفات CSV للمبتدئين
- قراءة ملفات CSV داخل مشروع بايثون بعد الأساسيات
- شرح pip في بايثون: تثبيت مكتبات بايثون وإدارة الحزم للمبتدئين
- أفضل مكتبات تحليل البيانات ببايثون
- كورس أساسيات بايثون للمبتدئين
مصادر خارجية مفيدة
الخلاصة
قراءة ملف CSV باستخدام pandas هي خطوة أساسية في تحليل البيانات ببايثون. باستخدام أمر واحد مثل pd.read_csv("students.csv") يمكنك تحويل ملف نصي بسيط إلى DataFrame منظم، وبعدها تبدأ بفحص البيانات وتحليلها.
في هذا الدرس تعلمت كيف تقرأ الملف، وتعرض أول الصفوف باستخدام head()، وتعرف حجم البيانات باستخدام shape، وتعرض أسماء الأعمدة باستخدام columns، وتستخدم info() لفهم بنية البيانات، ثم تحسب متوسط عمود رقمي وتستخرج صفوفًا حسب شرط معين.
{alertSuccess}
القاعدة المهمة: قبل أن تبدأ أي تحليل، اقرأ البيانات جيدًا، افحص أول الصفوف، راجع أسماء الأعمدة، وتأكد أن البيانات ظهرت بالشكل الصحيح داخل DataFrame.
أسئلة شائعة
ما معنى CSV؟
CSV اختصار لـ Comma-Separated Values، وهي صيغة بسيطة لتخزين البيانات في صفوف وأعمدة، وغالبًا تكون القيم فيها مفصولة بفواصل.
ما الفرق بين CSV وDataFrame؟
CSV هو ملف محفوظ على جهازك، أما DataFrame فهو شكل البيانات بعد قراءتها داخل pandas حتى تستطيع التعامل معها بالكود.
هل يجب تثبيت pandas قبل استخدام read_csv؟
نعم، إذا لم تكن مكتبة pandas مثبتة لديك، يجب تثبيتها أولًا باستخدام الأمر pip install pandas أو python -m pip install pandas.
لماذا يظهر خطأ FileNotFoundError عند قراءة CSV؟
لأن الملف غير موجود في المسار الذي كتبته، أو لأن اسم الملف مختلف. تأكد من مكان الملف واسمه، وتأكد أنه ليس محفوظًا باسم students.csv.txt.
ماذا أفعل إذا ظهرت البيانات كلها في عمود واحد؟
غالبًا الفاصل داخل الملف ليس فاصلة عادية. جرّب استخدام sep=";" أو افتح الملف وتأكد من الرمز المستخدم بين القيم.
كيف أتعامل مع ملف CSV يحتوي على نص عربي؟
احفظ الملف بترميز UTF-8، وإذا ظهرت الحروف بشكل غير صحيح جرّب استخدام encoding="utf-8-sig" عند قراءة الملف.



