Pandas: قراءة البيانات وكتابة البيانات
آخر تحديث: 2026-08-26
في المشاريع الحقيقية، لا تظهر البيانات في شفرتك من فراغ — بل تأتي من ملفات CSV وجداول بيانات Excel وقواعد البيانات ونقاط نهاية API. توفر مكتبة Pandas أكثر من 20 دورة IO تتيح لك تحميل البيانات وحفظها بتنسيقات متعددة بسطر واحد من الشفرة. يغطي هذا القسم 4 من التنسيقات الأكثر استخدامًا (CSV / Excel / JSON / SQL)، إلى جانب نصائح عملية للتعامل مع التشفير والملفات الكبيرة.
1. ماذا ستتعلم
- ❶ استخدام read_csv / to_csv بشكل معمّق
- ❷ التعامل مع ملفات Excel متعددة الأوراق باستخدام read_excel / to_excel
- ❸ معالجة تنسيقات JSON باستخدام read_json / to_json
- ❹ التفاعل مع قواعد البيانات باستخدام read_sql / to_sql
- ❺ مشاكل الترميز واستراتيجيات الملفات الكبيرة (chunksize)
2. كابوس الترميز لدى بوب
(1) الألم: فتح ملف CSV كنص مشوه
يستلم بوب ملف بيانات العملاء بصيغة CSV ويحمّله باستخدام المعلمات الافتراضية — فتتحول جميع الأحرف الصينية إلى رموز غير مفهومة:
import pandas as pd
# هذا سيفشل أو ينتج نصاً مشوهاً
# df = pd.read_csv('customers.csv') # UnicodeDecodeError!
> **الناتج:** شغّل هذا في بيئة بايثون المحلية لديك (pandas 2.x). خادم Piston لا يحتوي على pandas مثبّتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas الخاص بك.
السبب: الملف مرمّز بترميز GBK، لكن مكتبة Pandas تقرأه بترميز UTF-8 بشكل افتراضي.
(2) الحل: تحديد الترميز
▶ مثال: التعامل مع الترميز (الصعوبة ⭐)
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
> **الناتج:** شغّل هذا في بيئة بايثون المحلية لديك (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 الشائعة
▶ مثال
> **الناتج:** قم بتشغيل هذا في بيئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.
: تفاصيل معلمات read_csv (الصعوبة ⭐⭐)
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)
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.
(2) الحفظ باستخدام to_csv
▶ مثال
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.
: الحفظ باستخدام to_csv (الصعوبة ⭐)
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)
> **الناتج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محلياً (`pip install pandas`) واتباع الدرس. القيم الفعلية قد تختلف قليلاً حسب إصدار pandas الخاص بك.
4. قراءة وكتابة ملفات Excel
(1) استخدام read_excel مع أوراق عمل متعددة
▶ مثال
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.
: قراءة ملف Excel متعدد الأوراق (صعوبة ⭐⭐)
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)
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.
pip install openpyxl (لملفات .xlsx) أو pip install xlrd (لملفات .xls). يستخدم إصدار pandas 2.x محرك openpyxl بشكل افتراضي.
(2) الحفظ باستخدام to_excel
▶ مثال
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.
: حفظ ملف Excel وتنسيقه (صعوبة ⭐)
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')
> **المخرجات:** قم بتشغيل هذا الكود في بيئة بايثون المحلية لديك (إصدار pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقاً. يرجى تثبيتها محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلي قليلاً حسب إصدار pandas لديك.
5. قراءة وكتابة JSON
(1) أنواع تنسيقات JSON
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية (pandas 2.x). خادم Piston لا يحتوي على pandas مثبته مسبقاً. يرجى تثبيته محلياً (`pip install pandas`) واتباع الخطوات. قد تتغير القيم الفعلية قليلاً حسب إصدار pandas المستخدم.
: قراءة وكتابة متعددة التنسيقات JSON (الصعوبة ⭐⭐)
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)
> **الإخراج:** قم بتشغيل هذا في بيئة 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
▶ مثال
> **المخرج:** قم بتشغيل هذا في بيئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
: التفاعل مع قاعدة بيانات SQL (صعوبة ⭐⭐)
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()
> **المخرج:** قم بتشغيل هذا في بئة بايثون المحلية الخاصة بك (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) واتباع الخطوات. قد تختلف القيم الفعليّة قليلاً حسب إصدار pandas لديك.
pip install psycopg2 (PostgreSQL)، pip install pymysql (MySQL).
7. استراتيجيات معالجة الملفات الكبيرة
(1) القراءة على دُفعات باستخدام chunksize
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.
: معالجة الملفات الكبيرة باستخدام chunksize (الصعوبة ⭐⭐)
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)
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.
(2) تحميل الأعمدة المحددة فقط لتوفير الذاكرة
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة Python المحلية لديك (pandas 2.x). لا تحتوي خادم Piston على pandas مثبتًا مسبقًا. يرجى تثبيته محليًا (`pip install pandas`) والمتابعة. قد تختلف القيم الفعلية قليلاً حسب إصدار pandas لديك.
: التحميل الانتقائي للأعمدة (الصعوبة ⭐)
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] (حسب الموقع)
> **الإخراج:** قم بتشغيل هذا في بيئة 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
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]
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.
▶ مثال
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.
: خط أنابيب IO الكامل (الصعوبة ⭐⭐⭐)
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()
> **الإخراج:** قم بتشغيل هذا في بيئة بايثون المحلية (pandas 2.x). خادم Piston لا يحتوي على مكتبة pandas مثبتة مسبقًا. يرجى تثبيتها محليًا (`pip install pandas`) ومتابعة الدرس. قد تختلف القيم الفعليَّة قليلاً حسب إصدار pandas لديك.
❓ أسئلة شائعة
encoding='utf-8' أولاً؛ إذا فشل، استخدم encoding='gbk'. البديل الشامل هو encoding='latin1' (لن يُخطئ، لكن قد يُنتج نصاً مشوشاً). يمكنك أيضاً استخدام مكتبة chardet للكشف التلقائي عن الترميز..xlsx تتطلب pip install openpyxl، وملفات .xls تتطلب pip install xlrd. Pandas 2.x يستخدم محرك openpyxl كافتراضي. إذا ظهرت رسالة خطأ "Missing optional dependency"، فقط قم بتثبيت المكتبة المقابلة.pd.read_csv(path, chunksize=N) يُعيد كائن TextFileReader. كل تكرار يُنتج DataFrame من N صف. هذا مثالي للملفات التي تتجاوز الذاكرة المتاحة — معالجة كل جزء على حدة، وتجميع كل جزء على حدة، وحفظ كل جزء على حدة. ملاحظة: وضع chunksize لا يدعم الوصول العشوائي؛ يقرأ تسلسلياً فقط.usecols: pd.read_csv(path, usecols=['col1', 'col3']) للتحديد بالاسم، أو usecols=[0, 2, 4] للتحديد بالموضع. تحميل الأعمدة التي تحتاجها فقط يمكن أن يقلل استخدام الذاكرة بشكل كبير، خاصة للجداول العريضة (أكثر من 100 عمود لكن تحتاج 5 فقط).pip install pyarrow) ولا يصلح للفحص البشري المباشر. التوصية: استخدم CSV لتبادل البيانات الخام، و Parquet لتخزين البيانات المعالجة.index=False لحذفه. إذا كان فهرسك يحمل تسميات ذات معنى (مثل التواريخ)، يمكنك الاحتفاظ به باستخدام index=True.📖 ملخص
- read_csv هي دالة الإدخال/الإخراج الأكثر استخدامًا. المعلمات الرئيسية: encoding / sep / usecols / dtype / parse_dates
- عند الحفظ باستخدام to_csv، استخدم index=False لتجنب كتابة أرقام صفوف بلا معنى
- قراءة وكتابة ملفات Excel تتطلب مكتبة openpyxl وتدعم عمليات متعددة الأوراق (عبر معلمة sheet_name)
- يحتوي JSON على 5 أوضاع توجيه؛ استخدم records للتفاعل مع واجهات برمجة التطبيقات (API)
- يتم قراءة وكتابة SQL عبر اتصالات DB-API وتدعم استعلامات معاملة لمنع الحقن (SQL Injection)
- للملفات الكبيرة، استخدم chunksize للقراءة المجزأة + usecols لتحميل الأعمدة الانتقائية
- Parquet/HDF5/Feather أسرع بـ 5-50 مرة من CSV ومثالية لتخزين البيانات الضخمة
📝 تمارين
- أساسي (الصعوبة ⭐): استخدم StringIO لمحاكاة ملف CSV، قم بتحميله باستخدام read_csv (مع تحديد dtype و usecols)، ثم احفظه باستخدام to_csv (index=False).
- متوسط (الصعوبة ⭐⭐): قم بإنشاء 2 من DataFrames، اكتبهما في أوراق مختلفة في نفس ملف Excel باستخدام ExcelWriter، ثم اقرأ جميع الأوراق مرة أخرى باستخدام read_excel مع sheet_name=None.
- تحدي (الصعوبة ⭐⭐⭐): قم بمحاكاة ملف CSV يحتوي على 1000 صف (يتضمن قيم NaN وعمود تاريخ)، ثم أكمل ما يلي: read_csv (مع na_values/parse_dates/dtype) → ملء القيم المفقودة → التصدير بثلاث صيغ: to_csv/to_json/to_sql → اقرأها مرة أخرى باستخدام read_json للتحقق من الاتساق.