Длина индекса datetime в питоне - PullRequest
0 голосов
/ 30 августа 2018

Я просто не могу найти ответ, и я знаю, что панды едят такие проблемы в пустыне.

У меня есть datetime index и я хочу узнать его длину, в годах:

idx=pd.date_range('2011-07-03', '2015-07-10')

ожидаемый результат:

4.0191 years   (4 years and 7 days)

Если я сделаю: idx[0]-idx[-1] Я получаю вывод в days, но мне это нравится в годах

Извините: не удалось найти на panads документах

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Использование ptp и np.timedelta64:

>>> idx.to_series().ptp() / np.timedelta64(1, 'Y')
4.019247486259129

Если вы хотите, чтобы он был более конкретным (вплоть до дней) и получил объект Timedelta, просто не делите:

>>> idx.to_series().ptp()
Timedelta('1468 days 00:00:00')

Если date_range всегда сортируется, то использование to_series с ptp добавляет ненужную сложность, и вы можете использовать часть ответа @ jezrael

>>> (idx[-1] - idx[0]) / np.timedelta64(1, 'Y')
4.019247486259129
0 голосов
/ 30 августа 2018

Вы также можете использовать lativedelta следующим образом:

from dateutil.relativedelta import relativedelta

relativedelta(idx[0], idx[-1]).years

Убедитесь, что более поздняя дата является первым аргументом.

0 голосов
/ 30 августа 2018

Вы можете преобразовать timedelta в дни, а затем разделить на 365.25, если в этом нет необходимости 100% точность:

idx=pd.date_range('2011-07-03', '2015-07-10')

print ((idx[-1]-idx[0]).days / 365.25)

4.0191649555099245

Но при необходимости year с day с:

from dateutil.relativedelta import relativedelta

r = relativedelta(idx[-1], idx[0])
print('{} years {} days'.format(r.years, r.days))
4 years 7 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...