Python Разница между датами np массив - текущая дата - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь найти количество дней между списком дат в кадре данных Pandas и текущей датой.

Я хочу создать новый столбец с количеством дней между датами исполнения и текущей датой.Например:

+---------------------+------------+
|      Due Date       | Difference |
+---------------------+------------+
| 2019-04-15 00:00:00 |        146 |
| 2019-02-11 00:00:00 |         83 |
| 2019-03-11 00:00:00 |        111 |
| 2019-01-04 00:00:00 |         45 |
| 2019-05-13 00:00:00 |        174 |
+---------------------+------------+

Я пытался сделать:

current = np.datetime64('today')
df['Difference'] = df['Due Date'] - current

Но я получал неправильные числа.Это работает нормально, если я делаю их индивидуально, как:

df['Due Date'][0] - current

Любая помощь будет отличной.Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Но я получаю неправильные числа.

У меня отлично работает на Pandas 0.23 / NumPy 1.14.3, предполагая, что Due Date - это серия datetime:

print(df['Due Date'] - np.datetime64('today'))

0   146 days
1    83 days
2   111 days
3    45 days
4   174 days
Name: Due Date, dtype: timedelta64[ns]

Более идиоматично было бы использовать объекты, сгенерированные Pandas, и dt.days, если вы хотите целые числа:

print((df['Due Date'] - pd.Timestamp('today')).dt.days)

0    145
1     82
2    110
3     44
4    173
Name: Due Date, dtype: int64

Обратите внимание, например, на однодневный дифференциал, вызванный работой с версией NumPy.,Реальный ответ - между двумя, но округление, вероятно, не то, что ожидают.

0 голосов
/ 20 ноября 2018

Я бы проверил формат df["Due Date"].Если он не в том же формате даты и времени, что и сегодняшняя дата, переключите его.Вещание (простое вычитание) должно работать, если форматы совпадают.

В противном случае попробуйте использовать лямбда-функцию для применения ваших изменений:

df['Difference'] = df['Due Date'].apply(lambda x: x - current, axis=1)

0 голосов
/ 20 ноября 2018

Я думаю, вам нужно преобразовать их в datetime для выполнения операций, подобных дате.

df['Due Date'] = pd.to_datetime(df['Due Date'])

Таким образом, весь код будет выглядеть так:

df['Due Date'] = pd.to_datetime(df['Due Date'])
current = np.datetime64('today')
df['Difference'] = df['Due Date'] - current

РЕДАКТИРОВАТЬ: Также еще одна возможная проблема: я думаю, вам нужно было бы добавить текущую дату в виде столбца (или серии Panda), чтобы хорошим решением было:

current = np.datetime64('today')
df['current'] = np.datetime64('today')
df['Difference'] = df['Due Date'] - df['current']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...