Lưu ý rằng chúng ta có thể thay thế 'D' trong hàm timedelta64[] bằng các giá trị sau để tính chênh lệch ngày theo các đơn vị khác nhau
- W. tuần
- M. Tháng
- Y. năm
Các ví dụ sau đây cho thấy cách tính chênh lệch ngày trong DataFrame của gấu trúc trong thực tế
ví dụ 1. Tính toán sự khác biệt giữa hai ngày với cột ngày giờ
Giả sử chúng ta có DataFrame gấu trúc sau
import pandas as pd #create DataFrame 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
Vì cả hai cột trong DataFrame đã có kiểu dữ liệu là datetime64, nên chúng ta có thể sử dụng cú pháp sau để tính chênh lệch giữa ngày bắt đầu và ngày kết thúc
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
Các cột mới chứa sự khác biệt về ngày giữa ngày bắt đầu và ngày kết thúc theo ngày, tuần, tháng và năm
ví dụ 2. Tính toán sự khác biệt giữa hai ngày với các cột chuỗi
Giả sử chúng ta có DataFrame gấu trúc sau
import pandas as pd #create DataFrame 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
Vì không có cột nào trong DataFrame có dtype là datetime64, chúng tôi sẽ gặp lỗi nếu chúng tôi cố gắng tính toán sự khác biệt giữa các ngày
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'
Trước tiên chúng ta phải sử dụng pd. to_datetime để chuyển đổi từng cột thành định dạng ngày giờ trước khi tính toán sự khác biệt giữa các ngày
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
Vì lần đầu tiên chúng tôi chuyển đổi từng cột sang định dạng ngày giờ, nên chúng tôi có thể tính toán thành công chênh lệch giữa các ngày mà không có bất kỳ lỗi nào