pandas / المتوسط: التجميع والدمج والجودة الزمنية / الدرس 10
التواريخ والمناطق الزمنية وإعادة التجميع الزمني
تحليل عقد زمني صريح وتمييز اللحظة عن تسمية تقويم محلي قبل تجميع الزمن.
في هذه الصفحة
أهداف الدرس
- شرح التحليل وإسناد المنطقة وتحويلها كعمليات مختلفة.
- اختيار التردد وحدود الحاويات وسياسة الفترات المفقودة.
يحتاج الطابع الزمني تفسير ساعة
تختلف لحظة تحمل إزاحة عن قراءة ساعة محلية بلا منطقة. يحفظ التحويل إلى UTC اللحظة، ويغير تاريخها أو وقتها المعروض محلياً. يسند localization تفسير منطقة لقيم ساذجة، وقد يواجه أوقاتاً ملتبسة أو غير موجودة حول انتقال التوقيت الصيفي. لا تصف أوقات عمل محلية ساذجة بأنها UTC لمجرد إنجاح التحليل. حدد ساعة المصدر ومنطقته وصيغه المسموحة. قد يختلف يوم تقويمي في منطقة مسماة عن مدة ثابتة أربع وعشرين ساعة؛ فحدد المتطلب قبل استخراج التواريخ أو اختيار الحاويات اليومية.
رفض معنى مصدر غامض صراحة
استخدم صيغة صريحة حين يسمح عقد المصدر، وميزها من تفضيلات dayfirst التي لا تضمن تحققاً صارماً. تحول errors=coerce التواريخ الفاسدة إلى NaT، وقد تختفي لاحقاً من التجميع دون عد. تسند utc=True UTC للساذج وتحول الواعي إليه، ولا يصح ذلك إلا إذا طابق تفسير المصدر. قد تختلف الدقة بالنوع والإصدار؛ فلا تفترض نانوثانية لكل عمود. تحقق من تغطية التحليل والترتيب ووعي المنطقة قبل حساب الفروق أو تجميع فترات التقرير.
إظهار إغلاق الحاوية وتسميتها
لدى الإطار ملاحظتا UTC في الأول من أكتوبر وثالثة عند منتصف الليل التالي تماماً. يعطي التجميع اليومي المغلق يساراً والمسمى ببدايته خمس وحدات للأول وأربعاً للثاني. تدخل ملاحظة الحد الحاوية الثانية وفق القاعدة الصريحة. تمنع min_count=1 تفسير مجموع كله مفقود صفراً مرصوداً حيث تدعم العملية، لكن الفارغ وغير المرصود يحتاجان سياسة عمل أيضاً. التأكيدات مشتقة لا مختبرة. قد تختلف افتراضيات الإغلاق والتسمية لتردد آخر؛ فلا تعمم اليومي على شهري أو أسبوعي دون مراجعة.
import pandas as pd
frame = pd.DataFrame({'time': ['2026-10-01T00:00:00Z', '2026-10-01T23:00:00Z', '2026-10-02T00:00:00Z'], 'units': [2, 3, 4]})
frame['time'] = pd.to_datetime(frame['time'], format='ISO8601', utc=True)
daily = frame.set_index('time')['units'].resample('D', closed='left', label='left').sum(min_count=1)
assert daily.tolist() == [5, 4]
print(daily.tolist())
[5, 4]
يتوقع خمس وأربع وحدات وفق الحد المغلق يساراً؛ ولم تنفذ pandas.
إظهار تغير التاريخ للحظة نفسها
يحول المثال القياسي الأول من أكتوبر 01:00 بإزاحة +02:00 إلى الثلاثين من سبتمبر 23:00 UTC. يوضح سبب تغير مجتمع التقرير عند استخراج التاريخ قبل التحويل أو بعده. لا ينفذ localization أو تجميع pandas أو حل توقيت صيفي لمنطقة مسماة. قد يحتاج المصدر السياق المحلي واللحظة المطَبعة معاً؛ فاحفظ معلومات تدقيق التحويل. اختبر حد حاوية دقيقاً وطابعاً مفقوداً والتباس توقيت صيفي إذا وجده النطاق. لا تستنتج يوم العمل من توقيت الجهاز الذي يشغل الدفتر.
from datetime import datetime, timezone
source = datetime.fromisoformat('2026-10-01T01:00:00+02:00')
utc = source.astimezone(timezone.utc)
assert utc.isoformat() == '2026-09-30T23:00:00+00:00'
print(utc.isoformat())
2026-09-30T23:00:00+00:00
تبقى اللحظة ويتغير التاريخ؛ ولا يفحص مجمع pandas أو سياسة التوقيت الصيفي.
التحقق من التغطية عبر التقويم المختار
قارن في القبول الزمني مفاتيح الفترات والأعداد والإجماليات المتوقعة قبل التحليل والتجميع وبعدهما. لا يثبت نجاح التحليل دخول كل سجل اليوم المقصود. تحتاج الأوقات المفقودة واللحظات المكررة والتصحيحات المتأخرة سياسات صريحة. استخدم ترددات الإصدار المدعومة، لا صيغاً قديمة مزالة. ينفذ الدرس تحويل إزاحة قياسياً فقط. تبقى عمليات pandas والمنطقة والتردد والتجميع توضيحات غير منفذة، دون تثبيت قاعدة مناطق أو استعمال مصدر خارجي. احفظ النطاق مع العقد الزمني والنتائج المتوقعة المشتقة.
الأخطاء الشائعة وإصلاحها
اعتبار منتصف ليل محلي UTC دون مراجعة المصدر.
- لماذا يحدث؟
- الخلط بين معنى الإسناد وسهولة التحويل.
- كيف تصلحه؟
- حدد المنطقة وأسندها وحولها وفق العقد الموثق.
- كيف تتجنب تكراره؟
- احفظ تفسير الساعة الأصلي مع المطبع.
تحول تواريخ فاسدة إلى NaT واختفاؤها بصمت من الإجماليات.
- لماذا يحدث؟
- عدم مصالحة التحويل والتغطية الزمنية.
- كيف تصلحه؟
- احسب أخطاء التحليل وطبق سياسة زمن مفقود صريحة.
- كيف تتجنب تكراره؟
- اختبر الزمن الفاسد والمفقود مستقلين.
إسناد ملاحظة حد لفترة خاطئة.
- لماذا يحدث؟
- وراثة الإغلاق أو التسمية أو المنطقة دون مراجعة.
- كيف تصلحه؟
- حدد عقد الحاوية وافحص الحدود الدقيقة.
- كيف تتجنب تكراره؟
- افحص الفترات والأعداد والإجماليات بعد التجميع.
اختبر فهمك
1. هل قد يغير تحويل اللحظة نفسها إلى UTC تاريخها التقويمي الظاهر؟
اعرض الحل المشروح
نعم؛ ينتقل المثال من الأول 01:00+02:00 إلى الثلاثين 23:00 UTC. هذه لحظة واحدة بتسميتين تقويميتين. حدد اليوم المحلي أو UTC قبل استخراج التاريخ، واحفظ دليل منطقة المصدر لتفسير القرار.
2. هل تجعل errors=coerce عمود تاريخ غير موثوق آمناً تحليلياً؟
اعرض الحل المشروح
لا؛ تمثل الفشل بـNaT وقد تغير تغطية المجموعات. احسب الأخطاء وميز المفقود المعروف واختر رفضاً أو عزلاً أو تقريراً جزئياً صريحاً. لا يستبدل اكتمال التحويل عقد زمن متحققاً.
أهم ما تعلمته
- اللحظات والساعات المحلية والفترات التقويمية مفاهيم مختلفة.
- يحتاج التحليل والتجميع سياسات فشل وحدود صريحة.