Pandas & NumPy Academy · درس

قراءة ملفات CSV

حمّل ملفات CSV باستخدام pd.read_csv، وتحكّم في الفواصل وصفوف العناوين وأعمدة الفهرسة، ثم استعرض النتيجة.

الدرس 1 من 413 خطوة

قراءة ملفات CSV درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

لماذا يُعد CSV التنسيق الشامل

يُعد CSV (القيم المفصولة بفواصل) أكثر التنسيقات استخدامًا لتبادل البيانات الجدولية. فهو مقروء بشريًا، ومدعوم من كل قاعدة بيانات وجدول بيانات وأداة تحليلات، ولا يتطلب تعريف مخطط. وتُعد pd.read_csv() أكثر دوال Pandas استدعاءً في تحليل البيانات، لأن كل مجموعة بيانات عامة تقريبًا أو تصدير من واجهة API أو تفريغ قاعدة بيانات يتوفر بصيغة CSV.

import pandas as pd

# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())

استدعاء read_csv() الأساسي

المعامل المطلوب الوحيد هو مسار الملف (كسلسلة نصية أو كائن Path). تفترض Pandas افتراضيًا أن الصف الأول هو رأس الجدول (أسماء الأعمدة)، وأن الفاصل هو الفاصلة، وأنه يمكن استنتاج أنواع البيانات المناسبة للقيم. ويكون لـ DataFrame الناتج RangeIndex صحيح افتراضي. استدعوا df.info() دائمًا بعد التحميل مباشرة لاكتشاف مشكلات استنتاج الأنواع.

import pandas as pd

df = pd.read_csv('products.csv')

# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
                 sep=',',
                 header=0,
                 index_col=None)

التحكم في الفاصل

استخدموا المعامل sep= لتحديد فاصل غير الفاصلة. وتستخدم الملفات المفصولة بعلامات الجدولة (TSV) القيمة sep='\t'. وتستخدم بعض الصادرات الأوروبية الفواصل المنقوطة كفواصل (sep=';') لأن الفواصل تُستخدم للفصل العشري. مرّروا sep=None, engine='python' للسماح لـ Pandas باكتشاف الفاصل تلقائيًا من محتوى الملف.

import pandas as pd

# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')

# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')

# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')

رأس الجدول وskiprows

إذا لم يحتوِ ملف CSV على صف عناوين، فعيّنوا header=None وستُسنِد Pandas أسماء أعمدة صحيحة (0، 1، 2، ...). وفّروا أسماء مخصصة باستخدام names=['a', 'b', 'c']. استخدموا skiprows=n لتخطي أول n صفوف (لبيانات التعريف أو التعليقات في أعلى الملف). ويقبل skiprows أيضًا قائمة بأرقام صفوف محددة لتخطيها.

import pandas as pd

# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
                 names=['id', 'value', 'category'])

# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)

تعيين عمود الفهرس

يحدد index_col= العمود الذي سيُستخدم فهرسًا للصفوف. مرّروا اسم عمود أو موضعًا صحيحًا. يتيح تعيين فهرس ذي معنى (مثل عمود تاريخ أو معرّف فريد) الوصول السريع حسب التسمية باستخدام .loc، وهو مطلوب قبل إجراء عمليات السلاسل الزمنية. مرّروا قائمة لإنشاء MultiIndex.

import pandas as pd

# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype)  # datetime64[ns]

# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)

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

يخبر parse_dates=True Pandas بمحاولة تحويل الفهرس إلى datetime. مرّروا قائمة بأسماء الأعمدة إلى parse_dates=['col1', 'col2'] لتحليل أعمدة محددة غير مفهرسة بوصفها تواريخ. ستحاول Pandas تلقائيًا استخدام التنسيقات الشائعة؛ أما التنسيقات غير المعتادة فاستخدموا لها date_format=. يؤدي تحليل التواريخ عند التحميل إلى تجنب استدعاءات pd.to_datetime() المتكررة لاحقًا.

import pandas as pd

# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
                 parse_dates=['order_date'])
print(df['order_date'].dtype)  # datetime64[ns]

اختيار الأعمدة باستخدام usecols

يقوم usecols=['col1', 'col2'] بتحميل الأعمدة المحددة فقط، مع تجاهل جميع الأعمدة الأخرى. وهذا أمر بالغ الأهمية عند التعامل مع ملفات CSV الكبيرة؛ فلا حاجة إلى قراءة ملف يضم 200 عمود إذا كنتم تحتاجون إلى 5 أعمدة فقط. إذ يقلل ذلك بدرجة كبيرة من وقت عمليات الإدخال والإخراج ومن استخدام الذاكرة. مرروا دالة قابلة للاستدعاء لاختيار الأعمدة وفق نمط أسمائها.

import pandas as pd

# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
                 usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist())  # ['user_id', 'event', 'timestamp']

التحكم في أنواع البيانات عند التحميل

يستنتج Pandas أنواع البيانات، لكن قد يكون هذا الاستنتاج غير صحيح؛ فقد يتحول عمود معرّفات يتكون بالكامل من سلاسل رقمية إلى int64، أو يتحول عمود أسعار يحتوي على قيم مفقودة إلى float64 بشكل غير متوقع. استخدموا dtype={'col': str} لفرض الأنواع المطلوبة. وهذا أكثر كفاءة أيضًا؛ إذ يؤدي تحديد أنواع البيانات مسبقًا إلى تجاوز مرحلة الاستنتاج، وقد يسرّع تحميل الملفات الكبيرة بنسبة تتراوح بين 20 و30٪.

import pandas as pd

df = pd.read_csv('orders.csv', dtype={
    'order_id': str,      # keep as string (not int)
    'price': float,
    'quantity': 'int32'   # use smaller int
})

التعامل مع القيم المفقودة عند التحميل

يتعرف Pandas افتراضيًا على تمثيلات عديدة للقيم المفقودة، مثل الخلايا الفارغة و'NA' و'NaN' و'N/A' و'null' وغيرها. استخدموا na_values=['?', '-', 'missing'] لإضافة رموز مخصصة. واستخدموا keep_default_na=False لتعطيل القائمة المضمنة ومعاملة القيم التي تحددونها فقط على أنها مفقودة. يمنع ذلك اعتبار قيم نصية صحيحة مثل 'NA' (وهو اختصار) قيمة NaN عن طريق الخطأ.

import pandas as pd

df = pd.read_csv('survey.csv',
                 na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())

<p>يقوم <code>nrows=100</code> بتحميل أول 100 صف فقط، وهو مناسب تمامًا لفحص سريع للمخطط في ملف ضخم. أما <code>chunksize=10000</code> فيُرجع مكرّرًا من نوع <code>TextFileReader</code> ينتج كائنات DataFrame تضم 10000 صف في كل مرة، مما يتيح معالجة الملفات على أجزاء عندما لا تتسع لها ذاكرة RAM. ستتناول درس الأداء المتقدم القراءة على أجزاء بالتفصيل.</p>

nrows=100 يحمّل الصفوف المئة الأولى فقط — وهو مثالي لإجراء فحص سريع للمخطط في ملف ضخم. أما chunksize=10000 فيُرجع مكرّرًا من نوع TextFileReader يُنتج DataFrames، يحتوي كل منها على 10000 صف، مما يتيح معالجة الملفات على دفعات عندما يتعذّر تحميلها بالكامل في الذاكرة العشوائية (RAM). تتناول درس الأداء المتقدم القراءة على دفعات بالتفصيل.

import pandas as pd

# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)

# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
    print(chunk.shape)  # process each chunk

المشكلات الشائعة مع read_csv

انتبهوا إلى المشكلات المتكررة التالية: أخطاء الترميز (استخدموا encoding='utf-8' أو 'latin-1')، والمسافات البادئة في أسماء الأعمدة (استخدموا skipinitialspace=True)، وفواصل الآلاف في الأرقام (استخدموا thousands=',')، والفواصل العشرية في الأرقام الأوروبية (استخدموا decimal=',' وsep=';'). يؤدي تجاهل أي من هذه المشكلات بصمت إلى تحويل الأعمدة الرقمية إلى نوع object.

import pandas as pd

# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
                 sep=';',
                 decimal=',',
                 thousands='.',
                 encoding='utf-8',
                 skipinitialspace=True)

تحقق سريع

اختبروا فهمكم لقراءة ملفات CSV باستخدام Pandas في هذا الدرس.

مراجعة الدرس

تعلمتم في هذا الدرس أن: ‏pd.read_csv() هي الدالة الأساسية لتحميل البيانات الجدولية وتضم العديد من معاملات الإعداد، وأن ‏sep وheader وindex_col وparse_dates تتحكم في كيفية تفسير الملف، وأن ‏usecols وdtype يحسّنان الأداء ويضمنان سلامة الأنواع في الملفات الكبيرة. بعد ذلك سنقرأ ملفات Excel وJSON، التي تملك معاملات خاصة بتنسيقها.

البدء مجانًا

تعلم Python مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «قراءة ملفات CSV» مجاني؟

نعم — نص درس «قراءة ملفات CSV» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «قراءة ملفات CSV»؟

حمّل ملفات CSV باستخدام pd.read_csv، وتحكّم في الفواصل وصفوف العناوين وأعمدة الفهرسة، ثم استعرض النتيجة. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «قراءة ملفات CSV»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة ملفات CSV
  2. قراءة ملفات Excel وJSON
  3. كتابة DataFrames في الملفات
  4. القراءة من عناوين URL وStringIO
← العودة إلى Pandas & NumPy Academy