Как вычесть полсекунды из индекса даты и времени в python? - PullRequest
2 голосов
/ 09 октября 2019

Если у меня есть индекс даты и времени, подобный этому:

 DatetimeIndex(['2018-01-22 21:39:00', '2018-01-22 21:39:01',
                '2018-01-22 21:39:03', '2018-01-22 21:39:06',
                '2018-01-22 21:39:07', '2018-01-22 21:39:08',
                '2018-01-22 21:39:09', '2018-01-22 21:39:10',
                '2018-01-22 21:39:11', '2018-01-22 21:39:12'], dtype='datetime64[ns]', freq=None)

Как вычесть полсекунды из каждого значения, чтобы получить индекс времени данных, подобный этому:

 DatetimeIndex(['2018-01-22 21:38:59.50', '2018-01-22 21:39:00.50',
                '2018-01-22 21:39:02.50', '2018-01-22 21:39:05.50',
                '2018-01-22 21:39:06.50', '2018-01-22 21:39:07.50',
                '2018-01-22 21:39:08.50', '2018-01-22 21:39:09.50',
                '2018-01-22 21:39:10.50', '2018-01-22 21:39:11.50'], dtype='datetime64[ns]', freq=None)

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Решение

Вы можете вычесть 0.5 seconds из объектов DateTimeIndex как объект datetime.timedelta.

Короткий ответ

import datetime

dt = datetime.timedelta(seconds=0.5)
pd.DatetimeIndex(datetime_data) - dt

Вывод :

0   2018-01-22 21:38:59.500
1   2018-01-22 21:39:00.500
2   2018-01-22 21:39:02.500
3   2018-01-22 21:39:05.500
4   2018-01-22 21:39:06.500
5   2018-01-22 21:39:07.500
6   2018-01-22 21:39:08.500
7   2018-01-22 21:39:09.500
8   2018-01-22 21:39:10.500
9   2018-01-22 21:39:11.500
Name: Timestamp, dtype: datetime64[ns]

Подробное решение

1. Make Data

import numpy as np
import pandas as pd

datetime_data = ['2018-01-22 21:39:00', '2018-01-22 21:39:01',
                '2018-01-22 21:39:03', '2018-01-22 21:39:06',
                '2018-01-22 21:39:07', '2018-01-22 21:39:08',
                '2018-01-22 21:39:09', '2018-01-22 21:39:10',
                '2018-01-22 21:39:11', '2018-01-22 21:39:12']

dti = pd.DatetimeIndex(datetime_data)
dti

Вывод :

DatetimeIndex(['2018-01-22 21:39:00', '2018-01-22 21:39:01',
               '2018-01-22 21:39:03', '2018-01-22 21:39:06',
               '2018-01-22 21:39:07', '2018-01-22 21:39:08',
               '2018-01-22 21:39:09', '2018-01-22 21:39:10',
               '2018-01-22 21:39:11', '2018-01-22 21:39:12'],
              dtype='datetime64[ns]', freq=None)

2. Вычесть 0.5 Второй

import datetime

df = pd.DataFrame(dti, columns=['Timestamp'])
dt = datetime.timedelta(seconds=0.5)
df.Timestamp - dt

Выход :

0   2018-01-22 21:38:59.500
1   2018-01-22 21:39:00.500
2   2018-01-22 21:39:02.500
3   2018-01-22 21:39:05.500
4   2018-01-22 21:39:06.500
5   2018-01-22 21:39:07.500
6   2018-01-22 21:39:08.500
7   2018-01-22 21:39:09.500
8   2018-01-22 21:39:10.500
9   2018-01-22 21:39:11.500
Name: Timestamp, dtype: datetime64[ns]
0 голосов
/ 09 октября 2019

вы можете использовать pd.DateOffset, чтобы вычесть 0,5 секунды из каждого значения:

df.index - pd.DateOffset(seconds=0.5)
print(df)
DatetimeIndex(['2018-01-22 21:38:59.500000', '2018-01-22 21:39:00.500000',
           '2018-01-22 21:39:02.500000', '2018-01-22 21:39:05.500000',
           '2018-01-22 21:39:06.500000', '2018-01-22 21:39:07.500000',
           '2018-01-22 21:39:08.500000', '2018-01-22 21:39:09.500000',
           '2018-01-22 21:39:10.500000', '2018-01-22 21:39:11.500000'],
          dtype='datetime64[ns]', name=0, freq=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...