#python #pandas #datetime
#питон #панды #дата — время #python #pandas #datetime
Вопрос:
Я пытался подсчитать количество дней (SCN Date - Today)
. Я пробовал разные подходы, моя последняя попытка описана ниже. Он помещает дату с SCN Date
в поле `Сегодня»
Мне просто нужно получить количество дней в числовой форме.
import pandas as pd
eod = pd.read_excel('df.xlsx')
import datetime
eod['Today'] = datetime.date.today()
eod['Today'] = pd.Series(eod['Today'])
eod['Today'] = pd.Series(eod['SCN Date'])
eod['Days'] = eod['Today']-eod['SCN Date']
Ответ №1:
Используйте Timestamp
with Timestamp.floor
для datetimes без времени, извлеките и преобразуйте выходные временные интервалы в дни по Series.dt.days
, решение без нового столбца:
eod = pd.read_excel('df.xlsx')
eod['Days'] = (pd.Timestamp('now').floor('d') - eod['SCN Date']).dt.days
Или, при необходимости, преобразует столбец в datetimes use to_datetime
:
eod['Days'] = (pd.Timestamp('now').floor('d') - pd.to_datetime(eod['SCN Date'])).dt.days
Ответ №2:
Во-первых, вот как получить разницу дат в днях с помощью python datetime:
date1 = datetime.datetime.now()
date2 = datetime.datetime.now()
delta = date2 - date1
print(delta.days)
Тогда, если мы применим это к пандам:
import pandas as pd
eod = pd.read_excel('Documents/sample.xlsx')
import datetime
eod["Today"] = datetime.datetime.now()
eod["Delta"] = eod["Today"] - eod["SCN Date"]
eod["DeltaDays"] = eod["Delta"].apply(lambda x: x.days)
Последняя строка: eod["DeltaDays"] = eod["Delta"].apply(lambda x: x.days)
означает, что для каждого данные в столбце «Delta», возьмите его свойство «days» и сохраните его в столбце «DeltaDays»
Результат:
>>> eod
SCN Date Name Today Delta DeltaDays
0 2020-01-01 a 2020-09-10 14:20:30.046694 253 days 14:20:30.046694 253
1 2020-01-02 b 2020-09-10 14:20:30.046694 252 days 14:20:30.046694 252
2 2020-01-03 c 2020-09-10 14:20:30.046694 251 days 14:20:30.046694 251
3 2020-01-04 d 2020-09-10 14:20:30.046694 250 days 14:20:30.046694 250
4 2020-01-05 e 2020-09-10 14:20:30.046694 249 days 14:20:30.046694 249
5 2020-01-06 f 2020-09-10 14:20:30.046694 248 days 14:20:30.046694 248
6 2020-01-07 e 2020-09-10 14:20:30.046694 247 days 14:20:30.046694 247
7 2020-01-08 f 2020-09-10 14:20:30.046694 246 days 14:20:30.046694 246
8 2020-01-09 f 2020-09-10 14:20:30.046694 245 days 14:20:30.046694 245
9 2020-01-10 f 2020-09-10 14:20:30.046694 244 days 14:20:30.046694 244
10 2020-01-11 f 2020-09-10 14:20:30.046694 243 days 14:20:30.046694 243