Как фильтровать записи данных только по определенному времени? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть данные, аналогичные:

Out[504]:df 
            time1      temp1   temp2  dcity1  dcity2    s
0           00:20:00       7      7       1       1  1.000000
1           00:20:00       7      7       1       1  1.000000
2           00:20:00       7      6       1       1  0.971761
3           00:20:00       7      6       1       1  0.971761
4           00:20:00       7      6       1       1  0.971761
5           00:20:00       7      6       1       1  0.971761
16          00:20:00       7      6       1       1  0.971761
17          00:20:00       7      6       1       1  0.971761
20          00:20:00       7      6       1       1  0.971761
21          00:20:00       7      6       1       1  0.971761
...         ...         ...     ...      ...       ...    
210         00:20:00       7      6       1       3  0.971761
211         00:20:00       7      6       1       3  0.971761
262         00:20:00       7      7       1       4  1.000000
263         00:20:00       7      7       1       4  1.000000
264         00:20:00       7      7       1       4  1.000000
265         00:20:00       7      7       1       4  1.000000
266         00:20:00       7      7       1       4  1.000000
267         00:20:00       7      7       1       4  1.000000
 ..    ...    ...     ...     ...       ...    ...    ...
3350136     22:20:00       5      6      31      31  0.989284
3350137     22:20:00       5      6      31      31  0.989284
3350138     22:20:00       5      5      31      31  1.000000
 ...    ...    ...     ...     ...       ...    ...    ...
3350149     22:50:00       6      6      31      31  1.000000
3350150     22:50:00       6      6      31      31  1.000000
3350151     22:50:00       6      6      31      31  1.000000
3350152     22:50:00       6      6      31      31  1.000000
3350153     22:50:00       6      6      31      31  1.000000
3350154     22:50:00       6      6      31      31  1.000000

Где: time 1 указывает время регистрации температуры (temp1 и temp2)
dcity1 и dcity2 указываютдень месяца (январь)

Я бы хотел отфильтровать данные только по времени .Как я могу получить все записи, где время (time1) находится между 07:20:00 и 13:50:00?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018
import pandas as pd
...
df[(pd.to_datetime(df["dates"]) >= pd.to_datetime("07:20:00")) & (pd.to_datetime(df["dates"]) <= pd.to_datetime("13:50:00"))]

Вы можете использовать pd.to_datetime (time) для большей безопасности типов.

Пример с кэшированием:

dates = pd.to_datetime(df["dates"])
df[(dates >= pd.to_datetime("07:20:00")) & (dates <= pd.to_datetime("13:50:00"))]
0 голосов
/ 18 сентября 2018

Вы можете создать DatetimeIndex и затем использовать DataFrame.between_time:

df['time1'] = pd.to_datetime(df['time1'])
df = df.set_index('time1')
df = df.between_time('07:20:00','13:50:00')

При работе со временем используйте boolean indexing:

print (type(df.loc[0, 'time1']))
<class 'datetime.time'>

from datetime import time
df = df[(df.time1 > time(7,20,0)) & (df.time1 < time(13,50,0))]

Или преобразовать время в timedeltas:

#if input are strings
print (type(df.loc[0, 'time1']))
<class 'str'>

df['time1'] = pd.to_timedelta(df['time1'])

#if input are times
print (type(df.loc[0, 'time1']))
<class 'datetime.time'>

df['time1'] = pd.to_timedelta(df['time1'].astype(str))

print (type(df.loc[0, 'time1']))
<class 'pandas._libs.tslibs.timedeltas.Timedelta'>

df = df[(df['time1']> '07:20:00') & (df['time1'] < '13:50:00')]
0 голосов
/ 18 сентября 2018

Я бы сделал что-то вроде:

df[(df.time1 > '07:20:00') & (df.time1 < '13:50:00')]

PS: Если вы предоставите простой способ генерации случайной выборки, ее будет проще протестировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...