#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()
, и, похоже, это сработало!