Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

353
Visualizações
¿Existe una forma más rápida de ignorar las fechas y obtener tiempos específicos en una serie de fecha y hora que un bucle for?

Usando Python 3.9 en mac con Pycharm. Tengo un .csv que contiene dos columnas: fechas/horas como cadena y flotante:

 time Value 0 2021-12-01 20:00:00 166 1 2021-12-01 19:59:00 165

La granularidad del tiempo es por minuto, la mayoría de los días (se saltan algunos días). Lo que me gustaría hacer es tomar un solo valor para cada día de la lista en un momento específico, por ejemplo, todos los días contenidos en los datos a las 5:00 p. m. De esa manera, en lugar de tener cientos de valores por día, tendría:

 time Value 0 2021-12-02 17:00:00 166 1 2021-12-01 17:00:00 165 etc

Lo mejor que se me ocurrió al leer sobre la división de cadenas/series de tiempo es un bucle for donde los tiempos se dividen y el índice de 17:00:00 se usa para formar una nueva lista.

 df = pd.read_csv('name') datetime = df['time'].str.split() temp_df = pd.DataFrame() for _ in range(0, len(df)): if datetime[_][1] == '17:00:00': temp_df = temp_df.append(df.loc[[_]], ignore_index=True) temp_df['time'] = pd.to_datetime(temp_df['time']) #make datetime for further computing print(temp_df) output: ... time Value 175 2021-12-01 17:00:00 164 1083 2021-11-30 17:00:00 165 3313 2021-11-24 17:00:00 161

La otra forma sería dividirlo usando df['Dates'] = pd.to_datetime(df['time']).dt.date , pero no parece menos exigente que mi bucle actual.

He encontrado fuentes sobre la clasificación/selección de fechas/rangos (incluida la documentación de Pandas ), pero ninguna que le permita mantener e ignorar la fecha mientras selecciona la hora.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Prueba esto:

 df[df.time.str.contains('17:00:00')]
over 4 years ago · Santiago Trujillo Relatório

0

mantener pero ignorar la fecha mientras selecciona la hora

Después de convertir los tiempos to_datetime :

 df.time = pd.to_datetime(df.time)
  1. Utilice Series.dt.time para comparar con datetime.time :

     from datetime import time temp_df = df[df.time.dt.time == time(17, 0)]
  2. O use Series.dt.strftime para comparar solo la porción %H:%M:%S :

     temp_df = df[df.time.dt.strftime('%H:%M:%S').eq('17:00:00')]

Todo esto se hace sin un bucle, utilizando comparaciones vectorizadas e indexación booleana .

También puede comparar cadenas (como la respuesta de datetime ), pero almacenar datos de tiempo como objetos de fecha y hora reales facilitará el análisis a largo plazo.

over 4 years ago · Santiago Trujillo Relatório

0

Si desea descartar datos donde la hora de la marca de tiempo no es 17:00:00 de todos modos, creo que la solución más eficiente es no analizar la fecha y hora al importar a df , es decir, dejar fecha/hora como cadena. A continuación, seleccione los elementos en los que la hora sea las 5 p. m. y analice solo aquellos hasta fecha y hora.

Una pequeña timeit muestra que la comparación de cadenas es tan buena como comparar la parte de time de una columna de tipo de fecha y hora con un objeto de time ; sin embargo, la comparación de cadenas ahorraría cálculos ya que, en primer lugar, analiza muchas menos cadenas para fecha y hora.

 from datetime import time import pandas as pd # make hourly data, ~100k elements s_dt = pd.date_range('2010-01-01', '2020-12-31', freq='H').to_series() s_str = s_dt.astype(str) %timeit m = s_str.str.contains('17:00:00') 38.5 ms ± 1.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) %timeit m = s_str.str.split(' ').str[1] == '17:00:00' 94 ms ± 1.92 ms per loop (mean ± std. dev. of 7 runs, 10 loops each) %timeit m = s_dt.dt.time == time(17, 0) 41.9 ms ± 391 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda