محتويات الدورة

pandas / المتوسط: التجميع والدمج والجودة الزمنية / الدرس 8

مفاتيح الدمج والتعددية والمؤشرات

تحديد العلاقة المتوقعة بين الجدولين والتحقق من مجتمع المطابق وغير المطابق والمتضاعف.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • شرح علاقات المفاتيح واحد لواحد ومتعدد لواحد ومتعدد لمتعدد.
  • استخدام مفاتيح وتحقق ومؤشرات صريحة مع سياسة المفقود.

قد يضاعف الدمج ملاحظات المصدر

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

اختيار المفاتيح وسلوك القيم المفقودة (null) عمداً

حدد on أو مفتاحي اليسار واليمين المقصودين، ولا تعتمد تقاطع أسماء الأعمدة المشتركة. فقد يغير عمود جديد بالاسم نفسه معنى الدمج. لا يستخدم دمج الأعمدة فهارس الصفوف الموجودة مفتاح عمل ضمنياً. ويطابق pandas مفاتيح null بمفاتيح null، خلاف توقع مساواة null المعتاد في SQL. إذا لم يجز مطابقة صنف مجهول بآخر، فارفض الصفوف أو افصلها قبل الدمج. طبع التمثيل بعقد مراجع فقط؛ فتحويل 0017 و17 لصحيح قد يخلق تطابقاً زائفاً، وقد يدمج القص أو توحيد الحروف هويات مشروعة مختلفة.

التحقق من المرجع الفريد وتغطية المطابقة

يدمج البرنامج حركتين يسارياً بمرجع أصناف فريد مع validate=many_to_one وindicator=True. تطابق الصفان ويبقى العدد المعلن اثنين. يتحقق validate من تفرد مفتاح اليمين، ويعرض indicator منشأ المطابقة؛ ولا يثبت أيهما صحة قيم المرجع التاريخية. يحفظ الدمج اليساري مجتمع اليسار، لكنه قد يضاعفه إذا لم تضبط التعددية. كذلك لا يضمن نجاح validate مطابقة كل مفتاح يسار، فافحص المؤشر أو تأكيد تغطية مكافئاً. النتائج متوقعة من البيانات الصغيرة، ولم تنفذ في pandas.

python دمج متعدد لواحد متحقق توضيحي
import pandas as pd

movements = pd.DataFrame({'item': ['I1', 'I2'], 'units': [2, 3]})
reference = pd.DataFrame({'item': ['I1', 'I2'], 'name': ['Bolt', 'Nut']})
joined = movements.merge(reference, on='item', how='left', validate='many_to_one', indicator=True)
assert len(joined) == 2
assert joined['_merge'].eq('both').all()
print(joined['name'].tolist())
الناتج المتوقع
['Bolt', 'Nut']

المتوقع Bolt وNut بصفين مطابقين؛ ولم ينفذ تحقق pandas.

عد الأزواج باستقلال

يعطي النموذج القياسي صفي يسار وصفي يمين بالمفتاح A نفسه. ينتج ربط المساواة لكل زوج أربع مطابقات. يعزل آلية التعددية دون محاكاة أنواع pandas أو لواحقها أو تعاملها مع مفاتيح null. استخدم جدول تكرارات للمفاتيح لتوقع مواضع التضخم قبل تحميل نتيجة ضخمة. أبق السمات المتعارضة ظاهرة أثناء التشخيص. إذا كان المرجع الصحيح بإصدارات زمنية، فقد يحتاج شرط تاريخ سريان، لا حذف keep-first اعتباطياً. لا يثبت صف واحد مريح لكل مفتاح أنه الصف الصحيح للحدث المحلل.

python تضاعف أزواج مفتاح مكرر محلي
left = [{'key': 'A', 'id': 1}, {'key': 'A', 'id': 2}]
right = [{'key': 'A', 'label': 'x'}, {'key': 'A', 'label': 'y'}]
pairs = [(a['id'], b['label']) for a in left for b in right if a['key'] == b['key']]
assert len(pairs) == 4
print(len(pairs))
الناتج المتوقع
4

ينتج صفان مطابقان بكل جانب أربعة أزواج؛ ولا يعمل دمج pandas أو SQL.

مصالحة هوية الناتج ومقاييسه

ينبغي أن يتضمن قبول الدمج العلاقة المتوقعة وأنواع المفاتيح وسياسة مفاتيح null وتغطية غير المطابق ووحدة الناتج والإجماليات الثابتة. تسمح validate=many_to_many بالعلاقة ولا تفحص التفرد؛ فلا تقدمها اختبار حماية له. تميز اللواحق أسماء متداخلة ولا تقرر المصدر المرجعي. قارن الهويات المطلوبة والسمات المطابقة، لا شكل DataFrame فقط. ينفذ الدرس نموذج عد الأزواج العادي وحده. تبقى عملية دمج pandas وفئات المؤشر واستثناءات التحقق توضيحات غير منفذة، ولا تستشار قاعدة أو مصدر خارجي.

الأخطاء الشائعة وإصلاحها

مضاعفة دمج المرجع الوحدات دون حركات جديدة.

لماذا يحدث؟
تكرار مفتاح المرجع واتساع تعددية الناتج.
كيف تصلحه؟
حقق في وحدة المرجع واضبط علاقة الدمج المقصودة.
كيف تتجنب تكراره؟
افحص التكرارات واستخدم validate مناسباً قبل الإجماليات.

مطابقة مفاتيح مجهولة لبعضها دون توقع.

لماذا يحدث؟
تطبيق افتراضات SQL المعتادة على دمج pandas.
كيف تصلحه؟
ارفض المفقود أو اعزله وفق عقد الربط.
كيف تتجنب تكراره؟
أدرج مفاتيح خالية في الجانبين.

وصف many_to_many بحماية تفرد.

لماذا يحدث؟
اعتبار السماح بالعلاقة فحصاً للتفرد.
كيف تصلحه؟
استخدم العلاقة المقصودة وتأكيدات تفرد صريحة.
كيف تتجنب تكراره؟
حدد ما يفحصه كل خيار وما لا يفحصه.

اختبر فهمك

1. لماذا لا يثبت نجاح many_to_one مطابقة كل صف يسار؟

اعرض الحل المشروح

يفحص شرط تفرد المرجع لا التغطية الكاملة. قد يبقى صف بلا مقابل وسماته مفقودة. افحص indicator وصالح الهويات غير المطابقة مستقلة، ثم قرر قبول الفجوة أو اعتبارها فشل جودة.

2. هل تعالج مفاتيح مرجع مكررة بقاعدة keep-first اعتباطية؟

اعرض الحل المشروح

لا دون قاعدة عمل. قد تعني تعارضاً أو مفتاح إصدار ناقصاً أو سجلات زمنية مشروعة. احفظ الصفوف وحدد العلاقة المرجعية. قد يختار الحذف الحتمي وصفاً أو سعراً خاطئاً ويخفي عيب المصدر.

أهم ما تعلمته

  • التعددية وتغطية المطابقة فحصان منفصلان.
  • معالجة الخالي وتطبيع المفاتيح قراران تحليليان.

المراجع الرسمية