الدمج والضم المتقدمان
استخدام pd.merge() مع how وon وleft_on/right_on وsuffixes وmerge_asof للضم القائم على الوقت.
الدمج والضم المتقدمان درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
دمج إطارات البيانات
تربط pd.merge إطارَي بيانات اعتمادًا على مفاتيح مشتركة، تمامًا مثل SQL JOIN. ويُعد إتقان خيارات how أمرًا أساسيًا للعمل مع البيانات العلائقية.
import pandas as pd
left = pd.DataFrame({"id": [1, 2, 3], "name": ["a", "b", "c"]})
right = pd.DataFrame({"id": [2, 3, 4], "score": [90, 80, 70]})الربط الداخلي (الافتراضي)
يحتفظ how="inner" بالمفاتيح الموجودة في كلا الإطارين فقط. وهو الخيار الافتراضي.
print(pd.merge(left, right, on="id", how="inner"))
# id name score
# 0 2 b 90
# 1 3 c 80الربط الأيسر
يحتفظ how="left" بكل صف من الإطار الأيسر؛ وتصبح أعمدة الإطار الأيمن غير المطابقة NaN. وهو الربط الأكثر شيوعًا في التحليلات.
print(pd.merge(left, right, on="id", how="left"))
# id name score
# 0 1 a NaN
# 1 2 b 90.0
# 2 3 c 80.0الربط الخارجي
يحتفظ how="outer" بكل المفاتيح من كلا الجانبين، ويملأ الفجوات بـ NaN. استخدموه لرؤية الاتحاد الكامل للسجلات.
print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)الربط باستخدام أسماء أعمدة مختلفة
عندما تحمل أعمدة المفاتيح أسماء مختلفة، استخدموا left_on وright_on بدلًا من on.
r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))اللواحق للأعمدة المتداخلة
إذا اشترك الإطاران في اسم عمود غير مفتاحي، يضيف pandas اللحقَين _x و_y. تجاوزوا ذلك باستخدام suffixes لتحقيق الوضوح.
a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))عمود indicator
يضيف indicator=True عمودًا باسم _merge يوضح مصدر كل صف: left_only أو right_only أو both. وهو مهم جدًا لتدقيق عمليات الربط.
print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came fromتشخيص مشكلات الربط
يكشف التصفية باستخدام عمود indicator بسرعة عن المفاتيح غير المطابقة، وهي سبب شائع لفقدان البيانات بصمت.
m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"]) # rows that did not matchmerge_asof لعمليات الربط الزمني
ينفّذ pd.merge_asof الربط باستخدام أقرب مفتاح بدلًا من التطابق التام. وقد صُمّم خصيصًا لمحاذاة السلاسل الزمنية، مثل مطابقة كل صفقة مع أحدث عرض سعر سابق لها. يجب ترتيب كلا الإطارين حسب المفتاح.
trades = pd.DataFrame({"time": [1, 3, 7], "price": [10, 11, 12]})
quotes = pd.DataFrame({"time": [0, 2, 5], "bid": [9, 10, 11]})
print(pd.merge_asof(trades, quotes, on="time"))اتجاه merge_asof
افتراضيًا، يبحث merge_asof إلى الخلف (عن أحدث مفتاح في الوقت نفسه أو قبله). استخدم direction="forward" أو "nearest" لتغيير قاعدة المطابقة.
print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))اختيار عملية الربط المناسبة
استخدم inner للاحتفاظ بالمطابقات فقط، وleft لإثراء جدول أساسي، وouter للحصول على الاتحاد الكامل، وmerge_asof لعمليات الربط المتوافقة زمنيًا (بمفاتيح تقريبية).
تحقق سريع
اختبر معرفتك بعمليات الربط.
مراجعة
أدوات الدمج:
- يتحكم
how=في المفاتيح التي تبقى: inner وleft وouter - استخدم
onأوleft_on/right_onلأعمدة المفاتيح - تزيل
suffixesالالتباس بين الأسماء المتداخلة - تدقّق
indicator=Trueفي مصادر الصفوف - استخدم
pd.merge_asofلعمليات الربط الزمني بأقرب مفتاح (بعد الترتيب أولًا)
الأسئلة الشائعة
هل درس «الدمج والضم المتقدمان» مجاني؟
نعم — نص درس «الدمج والضم المتقدمان» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «الدمج والضم المتقدمان»؟
استخدام pd.merge() مع how وon وleft_on/right_on وsuffixes وmerge_asof للضم القائم على الوقت. تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الدمج والضم المتقدمان»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- GroupBy والتجميع
- الجداول المحورية والجدولة المتقاطعة
- الدمج والضم المتقدمان
- السلاسل الزمنية في Pandas