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.