Pandas: قراءة البيانات وكتابة البيانات

آخر تحديث: 2026-08-26

في المشاريع الحقيقية، لا تظهر البيانات في شفرتك من فراغ — بل تأتي من ملفات CSV وجداول بيانات Excel وقواعد البيانات ونقاط نهاية API. توفر مكتبة Pandas أكثر من 20 دورة IO تتيح لك تحميل البيانات وحفظها بتنسيقات متعددة بسطر واحد من الشفرة. يغطي هذا القسم 4 من التنسيقات الأكثر استخدامًا (CSV / Excel / JSON / SQL)، إلى جانب نصائح عملية للتعامل مع التشفير والملفات الكبيرة.

⚠️ ملاحظة: يجب تشغيل الشفرة أدناه في بيئة Python محلية. تستخدم بعض الأمثلة StringIO لمحاكاة قراءة الملفات وكتابتها.

1. ماذا ستتعلم



2. كابوس الترميز لدى بوب

(1) الألم: فتح ملف CSV كنص مشوه

يستلم بوب ملف بيانات العملاء بصيغة CSV ويحمّله باستخدام المعلمات الافتراضية — فتتحول جميع الأحرف الصينية إلى رموز غير مفهومة:

PYTHON
import pandas as pd
# هذا سيفشل أو ينتج نصاً مشوهاً
# df = pd.read_csv('customers.csv')  # UnicodeDecodeError!
TEXT 📖 للعرض فقط
> **الناتج:** شغّل هذا في بيئة بايثون المحلية لديك (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الخاص بك.

السبب: الملف مرمّز بترميز GBK، لكن مكتبة Pandas تقرأه بترميز UTF-8 بشكل افتراضي.

(2) الحل: تحديد الترميز

▶ مثال: التعامل مع الترميز (الصعوبة ⭐)

PYTHON
import pandas as pd
from io import StringIO

# محاكاة ملف CSV مرمّز بترميز GBK
csv_gbk = "name,age,city\nAlice,28,Beijing\nBob,34,Shanghai"
# في السيناريو الحقيقي: pd.read_csv('file.csv', encoding='gbk')

# UTF-8 (الافتراضي) — يعمل مع معظم الملفات الحديثة
csv_utf8 = "name,age,city\nAlice,28,New York\nBob,34,London"
df = pd.read_csv(StringIO(csv_utf8))
print(df)
#    name  age      city
# 0  Alice   28  New York
# 1    Bob   34    London
TEXT 📖 للعرض فقط
> **الناتج:** شغّل هذا في بيئة بايثون المحلية لديك (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الخاص بك.

(3) الفائدة: وظائف IO تنهي المهمة في سطر واحد

السيناريو الأمر في سطر واحد
قراءة ملف CSV pd.read_csv('data.csv')
كتابة ملف CSV df.to_csv('out.csv', index=False)
قراءة ملف Excel pd.read_excel('data.xlsx')
قراءة من قاعدة بيانات SQL pd.read_sql('SELECT * FROM t', conn)


3. قراءة وكتابة CSV

(1) معلمات read_csv الشائعة

▶ مثال

TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بيئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

: تفاصيل معلمات read_csv (الصعوبة ⭐⭐)

PYTHON
import pandas as pd
from io import StringIO

csv_data = """product_id,product_name,price,stock,category
P001,Laptop,999.99,50,Electronics
P002,Phone,699.99,120,Electronics
P003,Tablet,349.99,80,Electronics
P004,Monitor,449.99,35,Electronics
P005,Keyboard,79.99,200,Accessories"""

# القراءة الأساسية
df = pd.read_csv(StringIO(csv_data))
print(df.columns)  # تم اكتشافها تلقائياً من الصف الأول

# المعلمات الرئيسية (مع بيانات محاكاة)
# pd.read_csv('file.csv',
#     encoding='utf-8',        # ترميز الملف
#     sep=',',                 # الفاصل (الافتراضي فاصلة)
#     header=0,                # رقم الصف لعناوين الأعمدة
#     index_col='product_id',  # العمود لاستخدامه كفهرس
#     usecols=['product_name', 'price'],  # تحميل هذه الأعمدة فقط
#     dtype={'price': float, 'stock': int},  # فرض الأنواع
#     na_values=['N/A', 'NULL'],  # اعتبار هذه القيم كـ NaN
#     parse_dates=['order_date'],  # تحليل كتاريخ ووقت
#     nrows=1000,             # قراءة أول N صفوف فقط
#     chunksize=5000          # التكرار بقطع (chunks)
# )

# اختيار أعمدة محددة (يوفر الذاكرة)
df_selected = pd.read_csv(StringIO(csv_data), usecols=['product_name', 'price'])
print(df_selected)
TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

(2) الحفظ باستخدام to_csv

▶ مثال

TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.

: الحفظ باستخدام to_csv (الصعوبة ⭐)

PYTHON
import pandas as pd
from io import StringIO

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [28, 34, 25],
    'city': ['New York', 'London', 'Tokyo']
})

# الحفظ كسلسلة CSV (محاكاة ناتج الملف)
output = StringIO()
df.to_csv(output, index=False)  # index=False — لا تحفظ أرقام الصفوف
print(output.getvalue())
# name,age,city
# Alice,28,New York
# Bob,34,London
# Charlie,25,Tokyo

# ملف حقيقي: df.to_csv('output.csv', index=False, encoding='utf-8')

# الإلحاق بملف موجود
# df.to_csv('output.csv', mode='a', header=False, index=False)
TEXT 📖 للعرض فقط
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.


4. قراءة وكتابة ملفات Excel

(1) استخدام read_excel مع أوراق عمل متعددة

▶ مثال

TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.

: قراءة ملف Excel متعدد الأوراق (صعوبة ⭐⭐)

PYTHON
import pandas as pd
from io import BytesIO

# إنشاء ملف Excel متعدد الأوراق في الذاكرة
buffer = BytesIO()
df1 = pd.DataFrame({'name': ['Alice', 'Bob'], 'score': [85, 92]})
df2 = pd.DataFrame({'product': ['Laptop', 'Phone'], 'price': [999, 699]})

with pd.ExcelWriter(buffer) as writer:
    df1.to_excel(writer, sheet_name='Students', index=False)
    df2.to_excel(writer, sheet_name='Products', index=False)

buffer.seek(0)

# قراءة ورقة عمل محددة
students = pd.read_excel(buffer, sheet_name='Students')
print(students)

# قراءة جميع الأوراق كقاموس
buffer.seek(0)
all_sheets = pd.read_excel(buffer, sheet_name=None)  # قاموس من كائنات DataFrame
print(all_sheets.keys())  # dict_keys(['Students', 'Products'])

# القراءة حسب موقع الورقة (ترقيم من 0)
buffer.seek(0)
second_sheet = pd.read_excel(buffer, sheet_name=1)  # الفهرسة تبدأ من 0
print(second_sheet)
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.
💡 نصيحة: تتطلب دالة read_excel محركًا إضافيًا: pip install openpyxl (لملفات .xlsx) أو pip install xlrd (لملفات .xls). يستخدم إصدار pandas 2.x محرك openpyxl بشكل افتراضي.

(2) الحفظ باستخدام to_excel

▶ مثال

TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.

: حفظ ملف Excel وتنسيقه (صعوبة ⭐)

PYTHON
import pandas as pd
from io import BytesIO

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'salary': [75000, 92000, 68000]
})

# الحفظ في ورقة عمل واحدة
buffer = BytesIO()
df.to_excel(buffer, sheet_name='Employees', index=False)

# حفظ كائنات DataFrame متعددة في أوراق عمل مختلفة
buffer2 = BytesIO()
with pd.ExcelWriter(buffer2) as writer:
    df.to_excel(writer, sheet_name='Employees', index=False)
    df.describe().to_excel(writer, sheet_name='Statistics')
TEXT 📖 للعرض فقط
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.


5. قراءة وكتابة JSON

(1) أنواع تنسيقات JSON

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً. يرجى تثبيته محلياً (`pip install pandas`) واتباع الخطوات. قد تتغير القيم الفعلية قليلاً حسب إصدار pandas المستخدم.

: قراءة وكتابة متعددة التنسيقات JSON (الصعوبة ⭐⭐)

PYTHON
import pandas as pd
from io import StringIO

# orient='records' (الأكثر شيوعاً لواجهات API)
json_records = '[{"name":"Alice","age":28},{"name":"Bob","age":34}]'
df = pd.read_json(StringIO(json_records), orient='records')
print(df)
#     name  age
# 0  Alice   28
# 1    Bob   34

# orient='columns' (موجه بالعمود)
json_cols = '{"name":{"0":"Alice","1":"Bob"},"age":{"0":28,"1":34}}'
df2 = pd.read_json(StringIO(json_cols), orient='columns')
print(df2)

# orient='index' (موجه بالصف)
json_idx = '{"0":{"name":"Alice","age":28},"1":{"name":"Bob","age":34}}'
df3 = pd.read_json(StringIO(json_idx), orient='index')
print(df3)

# الكتابة إلى JSON
output = df.to_json(orient='records', indent=2)
print(output)
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً. يرجى تثبيته محلياً (`pip install pandas`) واتباع الخطوات. قد تتغير القيم الفعلية قليلاً حسب إصدار pandas المستخدم.

(2) مقارنة توجيهات JSON (orient)

التوجيه (orient) الهيكل حالة الاستخدام
records [{عمود:قيمة}, ...] استجابات API (الأكثر شيوعاً)
columns {عمود:{فهرس:قيمة}} موجه بالعمود
index {فهرس:{عمود:قيمة}} موجه بالصف
split {index:[], columns:[], data:[[]]} تفكيك كامل
values [[قيمة1,قيمة2], ...] بيانات خام بدون مسميات


6. قراءة وكتابة SQL

(1) استعلامات قاعدة البيانات باستخدام read_sql

▶ مثال

TEXT 📖 للعرض فقط
> **المخرج:** قم بتشغيل هذا في بيئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.

: التفاعل مع قاعدة بيانات SQL (صعوبة ⭐⭐)

PYTHON
import pandas as pd
import sqlite3
from io import StringIO

# Create in-memory SQLite database (for demo)
conn = sqlite3.connect(':memory:')

# Write data to SQL
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'department': ['Sales', 'Engineering', 'Marketing'],
    'salary': [75000, 92000, 68000]
})
df.to_sql('employees', conn, if_exists='replace', index=False)

# Read entire table
df_read = pd.read_sql('SELECT * FROM employees', conn)
print(df_read)

# Read with SQL query
high_salary = pd.read_sql(
    'SELECT name, salary FROM employees WHERE salary > 70000',
    conn
)
print(high_salary)
#      name  salary
# 0   Alice   75000
# 1     Bob   92000

# Read with parameters (safe from SQL injection)
dept = 'Engineering'
result = pd.read_sql(
    'SELECT * FROM employees WHERE department = ?',
    conn,
    params=[dept]
)
print(result)

conn.close()
TEXT 📖 للعرض فقط
> **المخرج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
💡 نصيحة: read_sql يدعم جميع قواعد البيانات المتوافقة مع واجهة Python DB-API، بما في ذلك SQLite / PostgreSQL / MySQL / SQL Server. تحتاج إلى تثبيت المشغّل المناسب: pip install psycopg2 (PostgreSQL)، pip install pymysql (MySQL).



7. استراتيجيات معالجة الملفات الكبيرة

(1) القراءة على دُفعات باستخدام chunksize

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.

: معالجة الملفات الكبيرة باستخدام chunksize (الصعوبة ⭐⭐)

PYTHON
import pandas as pd
from io import StringIO

# محاكاة ملف CSV كبير
csv_large = "id,value\n" + "\n".join([f"{i},{i*10}" for i in range(100)])

# القراءة على دفعات من 30 صفًا
chunks = pd.read_csv(StringIO(csv_large), chunksize=30)

total_sum = 0
total_count = 0

for chunk in chunks:
    total_sum += chunk['value'].sum()
    total_count += len(chunk)

print(f"Total rows: {total_count}")
print(f"Sum of values: {total_sum}")

# بديل: معالجة وحفظ كل دفعة
# for i, chunk in enumerate(chunks):
#     chunk.to_csv(f'chunk_{i}.csv', index=False)
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.

(2) تحميل الأعمدة المحددة فقط لتوفير الذاكرة

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.

: التحميل الانتقائي للأعمدة (الصعوبة ⭐)

PYTHON
import pandas as pd
from io import StringIO

csv_data = """id,name,age,salary,department,address,phone
1,Alice,28,75000,Sales,123 Main St,555-0100
2,Bob,34,92000,Engineering,456 Oak Ave,555-0200
3,Charlie,25,68000,Marketing,789 Pine Rd,555-0300"""

# تحميل الأعمدة التي تحتاجها فقط
df = pd.read_csv(StringIO(csv_data), usecols=['name', 'salary', 'department'])
print(df)
# يعمل أيضًا: usecols=[1, 3, 4] (حسب الموقع)
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.

(3) مقارنة تنسيقات الإدخال/الإخراج

التنسيق القراءة الكتابة السرعة الحجم الأفضل لـ
CSV read_csv to_csv متوسط متوسط التبادل العام
Excel read_excel to_excel بطيء كبير التقارير التجارية
JSON read_json to_json بطيء كبير واجهة برمجة التطبيقات / الويب
SQL read_sql to_sql بطيء قواعد البيانات
Parquet read_parquet to_parquet سريع صغير تخزين البيانات الضخمة
HDF5 read_hdf to_hdf سريع صغير البيانات العلمية
Feather read_feather to_feather الأسرع صغير التخزين المؤقت


8. مثال كامل: تحميل → تنظيف → تصدير بتنسيقات متعددة

(5) ▶ شجرة قرارات IO

100%
graph TB
    A[Data Source] --> B{File size?}
    B -->|Small| C[CSV / Excel / JSON]
    B -->|Medium| D[CSV + chunksize]
    B -->|Large| E[Parquet / Feather]
    A --> F{Need a database?}
    F -->|Yes| G[read_sql / to_sql]
    F -->|No| H{Need an API?}
    H -->|Yes| I[read_json]
    H -->|No| J[read_csv]
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.

▶ مثال

TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.

: خط أنابيب IO الكامل (الصعوبة ⭐⭐⭐)

PYTHON
import pandas as pd
import sqlite3
from io import StringIO, BytesIO

# ============================================
# مثال شامل: خط أنابيب IO كامل
# تحميل CSV → تنظيف → تصدير CSV/Excel/JSON/SQL
# ============================================

# 1. التحميل من CSV
csv_data = """name,age,salary,department,hire_date
Alice,28,75000,Sales,2022-03-15
Bob,34,92000,Engineering,2019-08-01
Charlie,25,NaN,Marketing,2023-01-10
Carol,30,88000,Sales,2020-06-20
David,45,105000,Management,2015-11-01"""
df = pd.read_csv(StringIO(csv_data), na_values=['NaN'])

# 2. تنظيف البيانات
df['salary'] = df['salary'].fillna(df['salary'].median())
df['hire_date'] = pd.to_datetime(df['hire_date'])
print("=== البيانات المنظفة ===")
print(df)

# 3. التصدير إلى CSV
csv_out = StringIO()
df.to_csv(csv_out, index=False)
print(f"\n✅ تصدير CSV: {len(csv_out.getvalue())} حرفًا")

# 4. التصدير إلى Excel
excel_out = BytesIO()
with pd.ExcelWriter(excel_out) as writer:
    df.to_excel(writer, sheet_name='Employees', index=False)
    df.describe().to_excel(writer, sheet_name='Stats')
print(f"✅ تصدير Excel: {len(excel_out.getvalue())} بايت، ورقتان")

# 5. التصدير إلى JSON
json_out = df.to_json(orient='records', indent=2, date_format='iso')
print(f"✅ تصدير JSON: {len(json_out)} حرفًا")

# 6. التصدير إلى SQL
conn = sqlite3.connect(':memory:')
df.to_sql('employees', conn, if_exists='replace', index=False)
df_from_sql = pd.read_sql('SELECT * FROM employees', conn)
print(f"✅ جولة SQL: {len(df_from_sql)} صفًا")
conn.close()
TEXT 📖 للعرض فقط
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.

❓ أسئلة شائعة

س كيف أتعامل مع أخطاء ترميز ملفات CSV؟
ج تشمل الترميزات الشائعة UTF-8 (الافتراضي الحديث)، وGBK/GB2312 (ويندوز صيني)، وISO-8859-1 (أوروبا الغربية). جرب encoding='utf-8' أولاً؛ إذا فشل، استخدم encoding='gbk'. البديل الشامل هو encoding='latin1' (لن يُخطئ، لكن قد يُنتج نصاً مشوشاً). يمكنك أيضاً استخدام مكتبة chardet للكشف التلقائي عن الترميز.
س هل تتطلب read_excel مكتبات إضافية؟
ج نعم. ملفات .xlsx تتطلب pip install openpyxl، وملفات .xls تتطلب pip install xlrd. Pandas 2.x يستخدم محرك openpyxl كافتراضي. إذا ظهرت رسالة خطأ "Missing optional dependency"، فقط قم بتثبيت المكتبة المقابلة.
س كم عدد أوضاع تنسيق JSON؟
ج هناك 5 أوضاع توجيه — records (الأكثر شيوعاً لواجهات برمجة التطبيقات)، وcolumns (موجه للأعمدة)، وindex (موجه للصفوف)، وsplit (تفكيك كامل)، وvalues (البيانات الخام). استخدم records للتفاعل مع واجهات برمجة التطبيقات، وcolumns أو split للتخزين الداخلي في Pandas.
س كيف أستخدم chunksize؟
ج pd.read_csv(path, chunksize=N) يُعيد كائن TextFileReader. كل تكرار يُنتج DataFrame من N صف. هذا مثالي للملفات التي تتجاوز الذاكرة المتاحة — معالجة كل جزء على حدة، وتجميع كل جزء على حدة، وحفظ كل جزء على حدة. ملاحظة: وضع chunksize لا يدعم الوصول العشوائي؛ يقرأ تسلسلياً فقط.
س كيف أقرأ أعمدة معينة فقط؟
ج استخدم معلمة usecols: pd.read_csv(path, usecols=['col1', 'col3']) للتحديد بالاسم، أو usecols=[0, 2, 4] للتحديد بالموضع. تحميل الأعمدة التي تحتاجها فقط يمكن أن يقلل استخدام الذاكرة بشكل كبير، خاصة للجداول العريضة (أكثر من 100 عمود لكن تحتاج 5 فقط).
س ما الفرق بين Parquet و CSV؟
ج Parquet هو تنسيق تخزين عمودي يقرأ أسرع من CSV بـ 5-50 مرة ويُنتج ملفات أصغر بـ 50-80% (بفضل الضغط المدمج). ومع ذلك، Parquet ليس نصاً عادياً (يتطلب pip install pyarrow) ولا يصلح للفحص البشري المباشر. التوصية: استخدم CSV لتبادل البيانات الخام، و Parquet لتخزين البيانات المعالجة.
س ما معنى index=False في to_csv؟
ج بشكل افتراضي، يكتب to_csv فهرس DataFrame كعمود أول. في معظم الحالات لا تحتاج لحفظ الفهرس الافتراضي RangeIndex(0,1,2,...)، لذا استخدم index=False لحذفه. إذا كان فهرسك يحمل تسميات ذات معنى (مثل التواريخ)، يمكنك الاحتفاظ به باستخدام index=True.

📖 ملخص


📝 تمارين

  1. أساسي (الصعوبة ⭐): استخدم StringIO لمحاكاة ملف CSV، قم بتحميله باستخدام read_csv (مع تحديد dtype و usecols)، ثم احفظه باستخدام to_csv (index=False).
  2. متوسط (الصعوبة ⭐⭐): قم بإنشاء 2 من DataFrames، اكتبهما في أوراق مختلفة في نفس ملف Excel باستخدام ExcelWriter، ثم اقرأ جميع الأوراق مرة أخرى باستخدام read_excel مع sheet_name=None.
  3. تحدي (الصعوبة ⭐⭐⭐): قم بمحاكاة ملف CSV يحتوي على 1000 صف (يتضمن قيم NaN وعمود تاريخ)، ثم أكمل ما يلي: read_csv (مع na_values/parse_dates/dtype) → ملء القيم المفقودة → التصدير بثلاث صيغ: to_csv/to_json/to_sql → اقرأها مرة أخرى باستخدام read_json للتحقق من الاتساق.

← Previous: Data Selection · Next: Missing Value Handling →

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%