python pandas timezone dst

Python pandas tz_localize lanza NonExistentTimeError, luego no puede caer veces erróneas



timezone dst (1)

Su comando de colocación no parece que debería funcionar según la descripción en los documentos. Para deshacerse de los tiempos ofensivos, crearía una máscara en el marco de datos, es decir:

from datetime import datetime mask = ((df.index<datetime.strptime("2006-04-02 02:00:00","%Y-%m-%d %H:%S:%M") | (df.index>datetime.strptime("2006-04-02 03:00:00","%Y-%m-%d %H:%S:%M")) # probably add some more years here as or clauses df_filtered = df[mask]

Probablemente hay una manera de hacer que también trabaje. Verifique esta pregunta relacionada: Eliminación de filas del horario de verano desde un dataframe indexado en tiempo

En los pandas de pitón, tengo un conjunto de datos que se ve así:

Para los datos anteriores a 2007-04-26 a las 17:00:00, la zona horaria es EE. UU./Oriental. Para los datos posteriores, la zona horaria es Americana / Chicago.

Cuando ejecuto esto:

data.index = data[:''2007-04-26 16:59:59''].index.tz_localize(''US/Eastern'', ambiguous = ''NaT'').tz_convert(''Europe/London'')

Me sale un error que dice:

NonExistentTimeError: 2006-04-02 02:00:00

Esto es de hecho debido al horario de verano. Tengo el mismo problema para 2007. No tengo el problema para los años siguientes. Idealmente, me gustaría tener dos comandos: uno que convierta la primera mitad del conjunto de datos de este a Londres y otro que convierta la segunda mitad de Chicago a Londres.

Como eso no funcionó, traté de dejar caer estos tiempos (una hora, creo), por ej. 02:00:00 a 03:00:00 donde hubo horario de verano. Sin embargo, cuando corro

data.drop(data.ix[''2005-04-03 2:00:00'':''2005-04-03 3:00:00''], inplace=True)

yo obtengo

ValueError: labels [''open'' ''high'' ''low'' ''close'' ''volume''] not contained in axis

¿Alguien sabe cómo puedo simplemente convertir estos tiempos? Cualquier ayuda sería muy apreciada.

Gracias, Alex

ACTUALIZAR para agregar más información:

Ok, he usado el siguiente código que ha funcionado para eliminar los tiempos ofensivos:

ACTUALIZACIÓN 2:

mask = ((data.index<datetime.strptime("2006-04-02 02:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2006-04-02 03:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2005-04-03 02:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2005-04-03 03:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2005-10-30 01:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2005-10-30 02:00:00","%Y-%m-%d %H:%S:%M"))) & ((data.index<datetime.strptime("2006-10-29 01:00:00","%Y-%m-%d %H:%S:%M")) | (data.index>datetime.strptime("2006-10-29 02:00:00","%Y-%m-%d %H:%S:%M"))) data_filtered = data[mask] data_filtered.ix = data_filtered.tz_localize(''US/Eastern'', infer_dst=True).tz_convert(''Europe/London'')

Pero ahora obtengo este error:

data_filtered.ix = data_filtered.tz_localize(''US/Eastern'', infer_dst=True).tz_convert(''Europe/London'') Traceback (most recent call last): File "<ipython-input-38-0fc8a9e68588>", line 1, in <module> data_filtered.ix = data_filtered.tz_localize(''US/Eastern'', infer_dst=True).tz_convert(''Europe/London'') File "C:/Anaconda/lib/site-packages/pandas/core/generic.py", line 1955, in __setattr__ object.__setattr__(self, name, value) AttributeError: can''t set attribute

Alguna idea sobre esto? Hice algunas búsquedas en Google, pero no pude encontrar nada realmente relacionado.