Ошибка, которую вы видите, выглядит так, потому что вы пытаетесь локализовать временную метку с поддержкой tz. '+00:00'
в ваших отметках времени указывает на то, что они поддерживают tz в UTC (или что-то в этом роде).
Некоторая терминология: наивная дата / время не имеет понятия о часовом поясе, а tz-осведомленная (или локализованная) ассоциируется с конкретным часовым поясом. Локализация относится к преобразованию tz-наивной даты / времени в tz-осведомленную. По определению вы не можете локализовать дату / время с поддержкой tz: вы либо конвертируете их в наивные, а затем локализуете, либо конвертируете напрямую в целевой часовой пояс.
Чтобы получить этот столбец в EST, преобразуйте его в наивный, а затем локализуйте в EST:
In [98]: df['transaction_timestamp_est'] = df['transaction_timestamp_est'].dt.tz_localize(None).dt.tz_localize('EST')
In [99]: df
Out [99]:
0 2013-05-28 05:18:00-05:00
1 2013-06-12 05:23:20-05:00
2 2014-06-21 05:26:26-05:00
Name: transaction_timestamp_est, dtype: datetime64[ns, EST]
Обратите внимание на 'EST' в dtype.
Затем вы можете преобразовать каждую временную метку в ее целевой часовой пояс:
In [100]: df['local_ts'] = df.apply(lambda x: x[0].tz_convert(x[1]), axis=1)
In [101]: df
Out[101]:
transaction_timestamp_est local_timezone local_ts
0 2013-05-28 05:18:00-05:00 America/Chicago 2013-05-28 05:18:00-05:00
1 2013-06-12 05:23:20-05:00 America/Los_Angeles 2013-06-12 03:23:20-07:00
2 2014-06-21 05:26:26-05:00 America/New_York 2014-06-21 06:26:26-04:00
Для пояснения: каждый элемент в первом столбце имеет тип pd.Timestamp . Его метод tz_convert()
меняет свой часовой пояс, переводя дату / время в новую зону.
В результате получается столбец pd.Timestamps
со смесью часовых поясов, с которым трудно справиться в пандах. Большинство (возможно, все) функции панд, которые работают со столбцами даты / времени, требуют, чтобы весь столбец имел одинаковый часовой пояс.
Если хотите, конвертировать в tz-naive:
In [102]: df['local_ts'] = df.apply(lambda x: x[0].tz_convert(x[1]).tz_convert(None), axis=1)
In [103]: df
Out[103]:
transaction_timestamp_est local_timezone local_ts
0 2013-05-28 05:18:00-05:00 America/Chicago 2013-05-28 10:18:00
1 2013-06-12 05:23:20-05:00 America/Los_Angeles 2013-06-12 10:23:20
2 2014-06-21 05:26:26-05:00 America/New_York 2014-06-21 10:26:26
Если ваши данные позволяют, лучше постараться сохранить столбцы меток времени (или индексов) в одном часовом поясе. UTC обычно лучше, так как в нем нет переходов DST или других проблем, которые могут привести к отсутствию / неоднозначности времени, как это делают большинство других часовых поясов.