الباندا: كيفية حساب الفرق بين تاريخين


يمكنك استخدام بناء الجملة التالي لحساب الفرق بين تاريخين في 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

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *