пересчет последовательности временных меток в питоне - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть последовательность отметок времени, например, так:

from datetime import datetime
dts = [datetime(2018, 12, 21, 10), datetime(2018, 12, 21, 11), datetime(2018, 12, 21, 12)]

Они могут иметь или не иметь пробелы, но каждая отметка времени представляет период времени в 1 час.Я хочу пересчитать это в последовательность из 30 минутных отметок времени, представляющих 30-минутные периоды, например, так: [datetime(2018, 12, 21, 10, 0), datetime(2018, 12, 21, 10, 30), datetime(2018, 12, 21, 11, 0), datetime(2018, 12, 21, 11, 30), datetime(2018, 12, 21, 12, 0), datetime(2018, 12, 21, 12, 30)].

Самое близкое, что мне удалось получить, это (ab) с использованием панд:

import pandas as pd
s = pd.Series(dts, index=pd.DatetimeIndex(dts))
s.asfreq('30T').index

, который дает мне следующее

DatetimeIndex(['2018-12-21 10:00:00', '2018-12-21 10:30:00',
               '2018-12-21 11:00:00', '2018-12-21 11:30:00',
               '2018-12-21 12:00:00'],
              dtype='datetime64[ns]', freq='30T')

Обратите внимание, что у него нет "2018-12-21 12:30:00".

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Использование date_range

pd.date_range(start=dts[0],end=dts[-1]+pd.Timedelta('30min'),freq='30min').tolist()
Out[203]: 
[Timestamp('2018-12-21 10:00:00', freq='30T'),
 Timestamp('2018-12-21 10:30:00', freq='30T'),
 Timestamp('2018-12-21 11:00:00', freq='30T'),
 Timestamp('2018-12-21 11:30:00', freq='30T'),
 Timestamp('2018-12-21 12:00:00', freq='30T'),
 Timestamp('2018-12-21 12:30:00', freq='30T')]
0 голосов
/ 22 декабря 2018

Вам не нужно pandas.Вы можете использовать timedelta для добавления временных интервалов к datetime объектам.

Вы можете использовать map, чтобы применить интервал к каждому элементу в dts, затем zip и list, чтобы создать новый промежуточный список.

from datetime import datetime
from datetime import timedelta

dts = [datetime(2018, 12, 21, 10), datetime(2018, 12, 21, 11), datetime(2018, 12, 21, 12)]

new_dts = list(zip(dts, map(lambda x: x + timedelta(minutes=30), dts)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...