Вы можете использовать следующий синтаксис для вычисления разницы между двумя датами в кадре данных pandas:
df['diff_days'] =(df['end_date'] - df['start_date']) / np.timedelta64 ( 1 , 'D')
В этом конкретном примере вычисляется разница между датами в столбцах end_date и start_date в днях.
Обратите внимание, что мы можем заменить «D» в функции timedelta64() следующими значениями для вычисления разницы дат в разных единицах измерения:
- Вт : недели
- М : Месяцы
- Г : Годы
В следующих примерах показано, как на практике рассчитать разницу дат в кадре данных pandas.
Пример 1: вычислить разницу между двумя датами со столбцами даты и времени
Предположим, у нас есть следующие Pandas DataFrame:
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
Поскольку оба столбца в DataFrame уже имеют dtype 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. Расчет разницы между двумя датами со строковыми столбцами
Предположим, у нас есть следующие Pandas DataFrame:
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
Поскольку ни один столбец в DataFrame не имеет dtype 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:
Как создать диапазон дат в Pandas
Как извлечь месяц из даты в Pandas
Как преобразовать отметку времени в дату и время в pandas