Фильтрация даты в формате python - PullRequest
2 голосов
/ 20 апреля 2020

Мой фрейм данных выглядит как -

date                           value
2018-04-01 19:50:00.013         29
2018-04-01 19:55:00.012         19
2018-04-01 20:00:00.019         20
2018-04-01 20:05:00.021         43
2018-04-01 20:10:00.005         50
2018-04-01 20:15:00.019         42
2018-04-01 20:20:00.023         65
2018-04-01 20:25:00.013         43
2018-04-01 20:30:00.003         29
2018-04-01 20:35:00.008         49
....
...
2020-04-10 05:45:00.018        639
2020-04-10 05:50:00.008        633
2020-04-10 05:55:00.021        629
2020-04-10 06:00:00.008        619
2020-04-10 06:05:00.011        610

У меня есть данные почти два года, и временной интервал этого набора данных составляет 5 минут. Я хочу забрать только данные, которые присутствуют с 6 утра до 8 вечера за этот 2-летний период. Мой окончательный фрейм данных выглядит как -

date                           value
2018-04-01 19:50:00.013         29
2018-04-01 19:55:00.012         19
2018-04-01 20:00:00.019         20
2020-04-10 06:00:00.008        619
2020-04-10 06:05:00.011        610

Я уже сделал -

Поднимите минимальную и максимальную дату -

max(df['date'])
max(df['date'])

mask1 = df['date'] >= '2018-04-01 06:00:00'
mask2 = df['date'] <= '2020-04-10 20:00:00'
df = df[mask1 & mask2]
df.head()

Но это не работает

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Используйте DataFrame.between_time, работая с DatetimeIndex, поэтому конвертируйте Date в индекс:

df = df.set_index('date').between_time('06:00','20:00')
print (df)
                         value
date                          
2018-04-01 19:50:00.013     29
2018-04-01 19:55:00.012     19
2020-04-10 06:00:00.008    619
2020-04-10 06:05:00.011    610
0 голосов
/ 20 апреля 2020

Вам необходимо отфильтровать по времени отдельно, как показано ниже

import pandas as pd
import datetime

df = pd.DataFrame(['2018-04-01 19:50:00.013', '2018-04-01 20:00:00.019',
'2018-04-01 20:05:00.021'], columns=['date'])
df['date'] = pd.to_datetime(df['date'])
df['time'] = [datetime.datetime.time(d) for d in df['date']] 
df[df['time'] < datetime.time(20)]
...