Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

352
Views
¿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 answers
Answer question

0

Prueba esto:

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

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!