Не удается получить количество дней в pandas .. он переносит дату из другого столбца

#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