pandas / المتوسط: التجميع والدمج والجودة الزمنية / الدرس 9
الضم وإعادة التشكيل وpivot وmelt
حفظ هوية الملاحظة عند ضم المحاور أو التحويل بين الشكل العريض والطويل.
في هذه الصفحة
أهداف الدرس
- تمييز الضم من الدمج بالمفاتيح.
- شرح تفرد pivot والتجميع الصريح عند إعادة التشكيل.
ليس تكديس الصفوف مطابقة كيانات
تضم concat كائنات على محور وتحاذي المحور الآخر وفق خياراتها. لا تطابق كيانات العمل تلقائياً كما يفعل merge. قد يحفظ تكديس مستخلصات شهرية تسميات فهرس مكررة، وتنشئ ignore_index محور مواضع جديداً لا تحقق هوية الصنف. عند الضم على الأعمدة، قد تدخل المحاذاة خلايا مفقودة إذا أشارت المدخلات إلى صفوف مختلفة. حدد هل تضيف ملاحظات أم تربط سمات، ثم اختر الواجهة المناسبة. احفظ مصدر القسم إذا تداخلت المستخلصات في الأحداث. لا يثبت فهرس متسلسل نظيف تفرد سجلات العمل المجمعة.
تغير إعادة التشكيل موضع تمثيل الهوية
قد يحوي العريض صف صنف واحداً بعمودي كمية يناير وفبراير. تنتج melt صفاً لكل ملاحظة صنف وشهر، ويصبح الشهر قيمة عمود. يزيد عدد الصفوف دون قياسات مصدر جديدة؛ فقد تغير التمثيل. حدد id_vars وvalue_vars كي لا تذاب المعرفات أو الحقول العددية غير المرتبطة كمقاييس خطأ. احفظ الوحدات ضمن العقد، خصوصاً إذا مثلت أعمدة المصدر وحدات أو مفاهيم مختلفة. لا يكون عمود قيمة واحد ذا معنى إلا إذا تقابلت الحقول أو حملت تفسيراً مستقلاً للمتغير والوحدة.
فحص أزواج الهوية وإجمالي محفوظ
يذيب البرنامج صفين لصنفين وعمودَي شهر إلى أربع ملاحظات، ثم يعيد pivot بأزواج صنف وشهر الفريدة. يبقى إجمالي الكمية ثمانية عشر، وتظل I2/فبراير ستة. تصف القواعد وحدات متقابلة معلنة. لا تثبت حفظ كل إعادة تشكيل للإجمالي؛ فقد يغير إسقاط المفقود أو جمع المكرر أو اختيار أعمدة أخرى التغطية. لم تنفذ التأكيدات في pandas. افحص مجموعة أزواج الهوية إلى جانب العدد والمجموع، فقد تعوض نسخة إضافية ملاحظة مفقودة في مقارنة سطحية لعدد الصفوف.
import pandas as pd
wide = pd.DataFrame({'item': ['I1', 'I2'], 'jan': [3, 4], 'feb': [5, 6]})
long = wide.melt(id_vars=['item'], value_vars=['jan', 'feb'], var_name='month', value_name='units')
restored = long.pivot(index='item', columns='month', values='units')
assert len(long) == 4
assert long['units'].sum() == 18
assert restored.loc['I2', 'feb'] == 6
print(len(long), int(long['units'].sum()))
4 18
المتوقع أربع ملاحظات ومجموع 18 لخلايا فريدة متقابلة؛ ولم تشغل pandas.
يحتاج الزوج المكرر قرار عمل
تطلب pivot قيمة فريدة لكل تركيب فهرس وعمود مختار، وتخطئ عندما يغمض التكرار هذا التمثيل. تجمع pivot_table وفق عقد، وقد يخفي استبدالها الصامت عيب وحدة الصف، خاصة إن لم يكن المتوسط الافتراضي المقياس المقصود. اختر الجمع أو المتوسط أو غيرهما صراحة بعد تفسير تكرار الملاحظات. قد ينشئ pivot متعدد المقاييس أعمدة هرمية تغير الاختيار والتصدير اللاحقين. سم البنية وتحقق منها، بدلاً من تسطيحها بفاصل غامض قد يتصادم مع أسماء حقول فعلية.
نمذجة توسع الملاحظات دون محرك
يوسع تعبير القوائم القياسي ملاحظات الصنف والشهر نفسها، ويتحقق من أربعة سجلات ومجموع ثمانية عشر. لا يحاكي أسماء فهرس pandas أو الفئات أو الترتيب أو إنشاء الخلايا المفقودة. اختبر في مراجعة متينة شهراً مفقوداً وزوجاً مكرراً وعموداً يشبه اسمه المعرف. يستخدم الدرس بيانات اصطناعية في الذاكرة ولا يكتب جدولاً خارجياً. تظل concat وmelt وpivot وpivot_table أمثلة غير منفذة أو مفاهيم موثقة. احفظ حدود الأدلة، واستخدم نتيجة السجلات لتحديد قاعدة الملاحظة المقصودة بصورة مستقلة.
wide = [{'item': 'I1', 'jan': 3, 'feb': 5}, {'item': 'I2', 'jan': 4, 'feb': 6}]
long = [{'item': row['item'], 'month': month, 'units': row[month]} for row in wide for month in ['jan', 'feb']]
assert len(long) == 4
assert sum(row['units'] for row in long) == 18
print(len(long), sum(row['units'] for row in long))
4 18
يفحص النموذج العدد والمجموع فقط مستقلاً عن إعادة تشكيل pandas.
الأخطاء الشائعة وإصلاحها
توقع مطابقة concat أوصافاً بمفتاح الصنف تلقائياً.
- لماذا يحدث؟
- الخلط بين ضم المحاور والدمج العلائقي.
- كيف تصلحه؟
- حدد عقد الجمع واستخدم دمج مفاتيح صريحاً عند الحاجة.
- كيف تتجنب تكراره؟
- افحص الهويات والمحاور قبل الجمع.
Index contains duplicate entries, cannot reshape
- لماذا يحدث؟
- تعريف زوج pivot المختار قيماً متعددة.
- كيف تصلحه؟
- حقق في الوحدة واختر رفضاً أو تجميعاً مبرراً صريحاً.
- كيف تتجنب تكراره؟
- أكد تفرد الأزواج قبل pivot.
تغيير الإجماليات بصمت باستبدال pivot بـpivot_table.
- لماذا يحدث؟
- إجابة تجميع ضمني عن سؤال آخر.
- كيف تصلحه؟
- اختر التجميع من معنى المقياس وصالح التغطية.
- كيف تتجنب تكراره؟
- اختبر الحفظ فقط حيث يفترض أن يحفظه التحويل.
اختبر فهمك
1. لماذا قد يصح تحويل صفين إلى أربعة دون تكرار القياسات؟
اعرض الحل المشروح
يحمل كل صف قياسين شهريين مستقلين. يمثل الطويل كل ملاحظة صنف وشهر بصف، فيتغير مفتاح التفرد من الصنف إلى الصنف والشهر. افحص الأزواج وأعمدة المقياس، ولا تعتبر كل زيادة عدد تكراراً عرضياً.
2. هل يعالج خطأ تكرار pivot بأخذ المتوسط دائماً؟
اعرض الحل المشروح
لا؛ قد يكشف وحدة خاطئة أو إدخالاً مكرراً أو أحداثاً مشروعة تحتاج مفتاحاً آخر. المتوسط مقياس محتمل وقد يفسد كمية جمع. احفظ المتعارض وحدد الوحدة واختر رفضاً أو تجميعاً موثقاً.
أهم ما تعلمته
- تنقل إعادة التشكيل الهوية وقد تغير وحدة الملاحظة.
- التجميع قرار عمل لا علاج عام للتكرار.