الباندا: كيفية حساب الفرق بين تاريخين
يمكنك استخدام بناء الجملة التالي لحساب الفرق بين تاريخين في pandas DataFrame:
df[' diff_days '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' D ')
يقوم هذا المثال تحديدًا بحساب الفرق بين التواريخ الموجودة في العمودين end_date و start_date من حيث الأيام.
لاحظ أنه يمكننا استبدال “D” في الدالة timedelta64() بالقيم التالية لحساب فرق التاريخ بوحدات مختلفة:
- ث : أسابيع
- م : شهر
- ي : سنوات
توضح الأمثلة التالية كيفية حساب فرق التاريخ في Pandas DataFrame عمليًا.
المثال 1: حساب الفرق بين تاريخين باستخدام أعمدة التاريخ والوقت
لنفترض أن لدينا DataFrame الباندا التالية:
import pandas as pd #createDataFrame df = pd. DataFrame ({' start_date ': pd. date_range (start=' 1/5/2020 ', periods= 6 , freq=' W '), ' end_date ': pd. date_range (start=' 6/1/2020 ', periods= 6 , freq=' M ')}) #view DataFrame print (df) start_date end_date 0 2020-01-05 2020-06-30 1 2020-01-12 2020-07-31 2 2020-01-19 2020-08-31 3 2020-01-26 2020-09-30 4 2020-02-02 2020-10-31 5 2020-02-09 2020-11-30 #view dtype of each column in DataFrame df. dtypes start_date datetime64[ns] end_date datetime64[ns] dtype:object
نظرًا لأن كلا العمودين في DataFrame يحتويان بالفعل على نوع datetime64 ، فيمكننا استخدام الصيغة التالية لحساب الفرق بين تاريخي البدء والانتهاء:
import numpy as np
#create new columns that contains date differences
df[' diff_days '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' D ')
df[' diff_weeks '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' W ')
df[' diff_months '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' M ')
df[' diff_years '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' Y ')
#view updated DataFrame
print (df)
start_date end_date diff_days diff_weeks diff_months diff_years
0 2020-01-05 2020-06-30 177.0 25.285714 5.815314 0.484610
1 2020-01-12 2020-07-31 201.0 28.714286 6.603832 0.550319
2 2020-01-19 2020-08-31 225.0 32.142857 7.392349 0.616029
3 2020-01-26 2020-09-30 248.0 35.428571 8.148011 0.679001
4 2020-02-02 2020-10-31 272.0 38.857143 8.936528 0.744711
5 2020-02-09 2020-11-30 295.0 42.142857 9.692191 0.807683
تحتوي الأعمدة الجديدة على فروق التاريخ بين تاريخي البدء والانتهاء من حيث الأيام والأسابيع والشهور والسنوات.
المثال 2: حساب الفرق بين تاريخين باستخدام أعمدة السلسلة
لنفترض أن لدينا DataFrame الباندا التالية:
import pandas as pd #createDataFrame df = pd. DataFrame ({' start_date ': ['2020-01-05', '2020-01-12', '2020-01-19'], ' end_date ': ['2020-06-30', '2020-07-31', '2020-08-31']}) #view dtype of each column print ( df.dtypes ) start_date object end_date object dtype:object
نظرًا لعدم احتواء أي عمود في DataFrame على نوع datetime64 ، فسوف نتلقى خطأ إذا حاولنا حساب الفرق بين التواريخ:
import numpy as np
#attempt to calculate date difference
df[' diff_days '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' D ')
TypeError : unsupported operand type(s) for -: 'str' and 'str'
يجب عليك أولاً استخدام pd.to_datetime لتحويل كل عمود إلى تنسيق التاريخ والوقت قبل حساب الفرق بين التواريخ:
import numpy as np
#convert columns to datetime
df[[' start_date ', ' end_date ']] = df[[' start_date ', ' end_date ']]. apply (pd. to_datetime )
#calculate difference between dates
df[' diff_days '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' D ')
#view updated DataFrame
print (df)
start_date end_date diff_days
0 2020-01-05 2020-06-30 177.0
1 2020-01-12 2020-07-31 201.0
2 2020-01-19 2020-08-31 225.0
منذ أن قمنا أولاً بتحويل كل عمود إلى تنسيق التاريخ والوقت، تمكنا من حساب الفرق بين التواريخ بنجاح دون أي أخطاء.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في الباندا:
كيفية إنشاء نطاق زمني في الباندا
كيفية استخراج الشهر من التاريخ في الباندا
كيفية تحويل الطابع الزمني إلى التاريخ/الوقت في Pandas