นุ่น: วิธีคำนวณความแตกต่างระหว่างวันที่สองวัน


คุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อคำนวณความแตกต่างระหว่างวันที่สองวันใน DataFrame ของแพนด้า:

 df[' diff_days '] = (df[' end_date '] - df[' start_date ']) / np. timedelta64 ( 1 ,' D ')

ตัวอย่างนี้จะคำนวณความแตกต่างระหว่างวันที่ในคอลัมน์ end_date และ start_date ในรูปของวัน

โปรดทราบว่าเราสามารถแทนที่ “D” ในฟังก์ชัน timedelta64() ด้วยค่าต่อไปนี้เพื่อคำนวณความแตกต่างของวันที่ในหน่วยต่างๆ:

  • : สัปดาห์
  • : เดือน
  • : ปี

ตัวอย่างต่อไปนี้แสดงวิธีการคำนวณความแตกต่างของวันที่ใน DataFrame ของแพนด้าในทางปฏิบัติ

ตัวอย่างที่ 1: คำนวณความแตกต่างระหว่างวันที่สองวันด้วยคอลัมน์ Datetime

สมมติว่าเรามี 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 เพื่อแปลงแต่ละคอลัมน์เป็นรูปแบบ 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
วิธีแยกเดือนจากวันที่ใน Pandas
วิธีแปลงการประทับเวลาเป็นวันที่/เวลาใน Pandas

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *