es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extrayendo intervalo de tiempo por minuto y hora en un día específico utilizando el datetimeindex de pandas.

Supongamos que tenemos un dataframe que incluye índices de tiempo y queremos extraer solo un dataframe que incluya 10:23 a 14:34. ¿Cómo podemos hacer esto?

n =1000
i = pd.date_range('2018-04-09', periods=n, freq='1min')
ts = pd.DataFrame({'A': [i for i in range(n)]}, index=i)
print(ts)
A
2018-04-09 00:00:00    0
2018-04-09 00:01:00    1
2018-04-09 00:02:00    2
2018-04-09 00:03:00    3
2018-04-09 00:04:00    4
...                  ...
2018-04-09 16:35:00  995
2018-04-09 16:36:00  996
2018-04-09 16:37:00  997
2018-04-09 16:38:00  998
2018-04-09 16:39:00  999

Mi intento:
Creo que para cada problema como este, necesitamos dividirlo en 3 condiciones. Corrígeme si me equivoco.

mask1 = (10 == ts.index.hour & 23 <= ts.index.minute)
mask2 = (10 <= ts.index.hour)
mask3 = (14 == ts.index.hour & 34 >= ts.index.minute)

mask = mask1 | mask2 | mask3
ts_deseado = ts[mask]

Entonces obtengo TypeError: Input must be Index or array-like.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Tu enfoque es correcto, pero tienes un error de sintaxis en tu código. En lugar de usar & y <, debes usar los símbolos & y < respectivamente. El código corregido se vería así:

    mask1 = (10 == ts.index.hour) & (23 <= ts.index.minute) 
    mask2 = (10 < ts.index.hour) & (ts.index.hour < 14)
    mask3 = (14 == ts.index.hour) & (ts.index.minute <= 34)
    
    mask = mask1 | mask2 | mask3
    ts_desire = ts[mask]
    

    Esto debería darte un DataFrame que incluye solo las filas entre las 10:23 y las 14:34.

Comments are closed.