pandas даты от и до int - PullRequest
       4

pandas даты от и до int

1 голос
/ 13 февраля 2020

У меня есть pandas.DatetimeIndex ниже:

import pandas as pd
d_range = pd.date_range('2000-01-01', '2019-01-31')
m_idx = pd.MultiIndex.from_product([d_range, range(10000)], names=['date', 'id'])
d_idx = m_idx.get_level_values('date')
d_idx.shape

(69710000,)

Есть ли быстрые способы преобразовать его в numpy.ndarray из int что в идеале представляет количество дней после 1969-12-31? И как преобразовать этот массив int обратно numpy.datetime64?

Обновление :

Приведенный выше пример моего реального использования, который составляет 70 миллионов строк DatetimeIndex. ответ ansev работает, но для запуска требуется много времени. Есть ли какой-нибудь более быстрый путь?

%timeit (d_idx - pd.to_datetime('1969-12-31')).days.values

2,08 с ± 6,19 мс на л oop (среднее ± стандартное отклонение из 7 прогонов, 1 л oop каждый)

1 Ответ

3 голосов
/ 13 февраля 2020

Используйте DatetimeIndex.days после вычитания преобразования в дату и время с pd.to_datetime:

(d_idx-pd.to_datetime('1969-12-31')).days.to_numpy()

Выход

array([10958, 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966,
       10967, 10968, 10969, 10970, 10971, 10972, 10973, 10974, 10975,
       10976, 10977, 10978, 10979, 10980, 10981, 10982, 10983, 10984,
       10985, 10986, 10987, 10988])

Или:

(d_idx-pd.to_datetime('1969-12-31')).days.values

(d_idx-pd.to_datetime('1969-12-31'))

#TimedeltaIndex(['10958 days', '10959 days', '10960 days', '10961 days',
#                '10962 days', '10963 days', '10964 days', '10965 days',
#                '10966 days', '10967 days', '10968 days', '10969 days',
#                '10970 days', '10971 days', '10972 days', '10973 days',
#                '10974 days', '10975 days', '10976 days', '10977 days',
#                '10978 days', '10979 days', '10980 days', '10981 days',
#                '10982 days', '10983 days', '10984 days', '10985 days',
#                '10986 days', '10987 days', '10988 days'],
#               dtype='timedelta64[ns]', freq=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...