Как я могу добавить секунды к данным временных рядов в Python?

#python #pandas #datetime #matplotlib #time-series

#python #pandas #дата и время #matplotlib #временные ряды

Вопрос:

Итак, у меня есть следующие временные метки, которые принадлежат TS в фрейме данных pandas:

  Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 Timestamp('2010-11-20 00:00:00'),
 

Исходный csv-файл содержит показания 60 показаний за каждую прошедшую минуту, но временная метка имеет только hh: mm (например, 13:23), и когда я конвертирую / анализирую даты, он просто добавляет 00 ко всем записям секунд. Есть ли какие-либо функции pandas для добавления секунд? Мотивация этого заключается в том, что он будет красиво отображаться в matplotlib. В настоящее время у меня есть 60 точек перекрытия для каждой минуты, однако я хочу, чтобы временные метки увеличивались, например 00:00:01, 00:00:02, 00:00:03, и т.д.

Комментарии:

1. Вы должны вставить минимальный (!!!) рабочий пример вашего кода и данных

2. Если вы уверены, что в минуту ровно 60 выборок, просто создайте объект timestamp, имеющий дату и время как ноль, а секунды как 1, 2, 3 .. затем просто добавьте 2 в цикл

3. повторная выборка с частотой 1 сек может быть вариантом.

Ответ №1:

вручную добавьте туда секунды, предполагая, что они отсортированы, а приращение всегда составляет 1 секунду:

 df = pd.Series([pd.Timestamp(2020,11,20,0,0)]*10)
df  = pd.Series(pd.Timedelta(seconds=i) for i in range(10))
 
 0   2020-11-20 00:00:00
1   2020-11-20 00:00:01
2   2020-11-20 00:00:02
3   2020-11-20 00:00:03
4   2020-11-20 00:00:04
5   2020-11-20 00:00:05
6   2020-11-20 00:00:06
7   2020-11-20 00:00:07
8   2020-11-20 00:00:08
9   2020-11-20 00:00:09
dtype: datetime64[ns]