Pandas: преобразование метки времени в datetime

#python #pandas #datetime

#python #pandas #дата-время

Вопрос:

У меня есть столбец строк даты и времени, в UTC которых мне нужно преобразовать в приемлемый формат даты и времени при EST использовании pandas . Я успешно преобразовал столбец, однако я чувствую, что мое решение многословно и может быть упрощено, но я не уверен, как. Вот как я сейчас конвертирую даты:

 df['datetime'] = pd.to_datetime(df['datetime'])
df['datetime'] = df['datetime'].dt.strftime('%m/%d/%Y %H:%M:%S')
df['datetime'] = pd.to_datetime(df['datetime'])
df['datetime'] = df['datetime'] - pd.Timedelta(hours=5)
  

Вот несколько примеров исходного формата строки:

 2014-02-07T00:25:40Z
2014-02-07T00:25:40Z
2014-02-07T00:25:41Z
2014-02-07T00:25:42Z
2014-02-07T00:25:42Z
2014-02-07T00:25:43Z
2014-02-07T00:25:43Z
2014-02-07T00:25:44Z
2014-02-07T00:25:44Z    
2014-02-07T00:25:44Z
  

Могу ли я преобразовать этот столбец в одну или две строки? Я попытался выполнить Timedelta() на том же шаге, что и форматирование datetime, но получил ошибку. В качестве альтернативы я попытался использовать tz_convert() и tz_localize() , но получил сообщение об ошибке с tz_convert() сообщением о том, что мое datetime не является жизнеспособным форматом datetime (следовательно, почему я сбрасываю столбец в datetime после форматирования). С tz_localize() это просто добавлено -5:00 к концу моего datetime вместо фактического вычитания 5 часов из UTC времени.

Вот как должен выглядеть результат:

 2014-02-06 19:25:40
2014-02-06 19:25:40
2014-02-06 19:25:41
2014-02-06 19:25:42
2014-02-06 19:25:42
2014-02-06 19:25:43
2014-02-06 19:25:43
2014-02-06 19:25:44
2014-02-06 19:25:44
2014-02-06 19:25:44
  

Ответ №1:

Я сделаю tz_localize и tz_localize

 pd.to_datetime(df.date).dt.tz_localize('UTC').
     dt.tz_convert('EST').
      dt.strftime('%Y-%m-%d %H:%M:%S')
0    2014-02-06 19:25:40
1    2014-02-06 19:25:41
2    2014-02-06 19:25:42
3    2014-02-06 19:25:42
4    2014-02-06 19:25:43
5    2014-02-06 19:25:43
6    2014-02-06 19:25:44
7    2014-02-06 19:25:44
8    2014-02-06 19:25:44
Name: date, dtype: object
  

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

1. Я получил TypeError: Already tz-aware, use tz_convert to convert.

2. @andrrvt15 Я просто использую ваши входные данные, и это отлично работает на моей стороне

3. @andrrvt15 github.com/influxdata/influxdb-python/issues/671 , попробуйте обновить свои pandas

4. Я удалил dt.tz_localize() , и, похоже, это сработало!