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.

Solo devolver entradas dentro de la última hora.

Estoy intentando filtrar datos en mi archivo csv para mostrar solo entradas con tiempo entre la hora actual y 1 hora antes.

Los datos se ven así después de filtrar solo las columnas para “CreatedAt” y “ID”:

                CreatedAt        ID
2021-11-26 09:36:05-08:00     99702
2021-11-26 07:21:36-08:00    645478
2021-11-25 09:34:00-08:00    204446
2021-11-25 00:19:08-08:00    394719
2021-11-24 23:08:15-08:00    769537
                              ...
2016-01-22 12:16:28-08:00    278137
2016-01-22 10:55:31-08:00    374485
2016-01-22 09:55:22-08:00    807451
2016-01-21 12:23:36-08:00    346137
1969-12-31 16:00:01-08:00    883029
import pandas as pd
import datetime

df = pd.read_csv('file.csv', index_col='CreatedAt', parse_dates=['CreatedAt'])
sorted_df = df.sort_values(by=["CreatedAt"], ascending=False)
end_time= datetime.datetime.utcnow()
last_hour= end_time - datetime.timedelta(hours=1)
filtered_dates = sorted_df.loc[last_hour]

print(filtered_dates)

Cuando imprimo filtered_dates, el código está calculando correctamente la diferencia entre los 2 tiempos, pero por alguna razón no está imprimiendo la totalidad de los datos que me gustaría ver.

Cualquier ayuda siempre es apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código solo está recuperando filas que coinciden exactamente con la hora de last_hour. Para filtrar los datos y mostrar solo entradas con la hora entre la hora actual y 1 hora antes, debe utilizar la función .loc para localizar donde la columna CreatedAt se encuentra entre los dos tiempos. Puede hacer esto cambiando la línea filtered_dates a lo siguiente:

    filtered_dates = sorted_df.loc[(sorted_df.index < end_time) & (sorted_df.index >= last_hour)]
    

    Esto usa la indexación booleana para seleccionar filas donde la columna CreatedAt está entre los dos tiempos, verificando si cada índice es más pequeño que end_time y mayor o igual que last_hour.

Comments are closed.