Добавление смещения к метке времени в пандах

У меня есть dataframe df, и когда я запускаю print(df.index), я получаю:

DatetimeIndex(['2011-08-05 00:00:00-04:00', '2011-08-05 01:00:00-04:00',
               '2011-08-05 02:00:00-04:00', '2011-08-05 03:00:00-04:00',
               '2011-08-05 04:00:00-04:00', '2011-08-05 05:00:00-04:00',
               '2011-08-05 06:00:00-04:00', '2011-08-05 07:00:00-04:00',
               '2011-08-05 08:00:00-04:00', '2011-08-05 09:00:00-04:00',
               ...
               '2017-07-30 14:00:00-04:00', '2017-07-30 15:00:00-04:00',
               '2017-07-30 16:00:00-04:00', '2017-07-30 17:00:00-04:00',
               '2017-07-30 18:00:00-04:00', '2017-07-30 19:00:00-04:00',
               '2017-07-30 20:00:00-04:00', '2017-07-30 21:00:00-04:00',
               '2017-07-30 22:00:00-04:00', '2017-07-30 23:00:00-04:00'],
              dtype='datetime64[ns, America/New_York]', name=u'Time', length=52488, freq=None)

Я пытаюсь изменить объект datetimeindex, чтобы

  1. Первая метка времени в серии изменена с '2011-08-05 00:00:00-04:00' на '2011-08-04 20:00:00' и
  2. Вторая марка в серии будет изменена с '2011-08-05 00:00:00-04:00' на '2011-08-04 21:00:00' и так далее.

Я попробовал pd.to_datetime(df.index, format='%Y-%m-%d %H:%M:%S'), но он возвращает тот же объект datetimeindex, что и выше.

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

df.index.strftime('%Y-%m-%d %H:%M:%S')

Но ни одна строка кода не достигает моей конечной цели.


person Ambarish Nag    schedule 03.12.2017    source источник


Ответы (1)


Используйте tz_convert для удаления timezone и добавления Hour :

df.index.tz_convert(None) + pd.offsets.Hour(16)

Or:

df.index.tz_convert(None) + pd.Timedelta(16, unit='h')

Образец:

idx = ['2011-08-05 00:00:00-04:00', '2011-08-05 01:00:00-04:00', 
       '2011-08-05 02:00:00-04:00', '2011-08-05 03:00:00-04:00']
idx = pd.DatetimeIndex(idx).tz_localize('UTC').tz_convert('America/New_York')
print (idx)
DatetimeIndex(['2011-08-05 00:00:00-04:00', '2011-08-05 01:00:00-04:00',
               '2011-08-05 02:00:00-04:00', '2011-08-05 03:00:00-04:00'],
              dtype='datetime64[ns, America/New_York]', freq=None)

idx = idx.tz_convert(None) + pd.offsets.Hour(16)
print (idx)
DatetimeIndex(['2011-08-05 20:00:00', '2011-08-05 21:00:00',
               '2011-08-05 22:00:00', '2011-08-05 23:00:00'],
              dtype='datetime64[ns]', freq='H')
person jezrael    schedule 03.12.2017