如何仅根据特定时间过滤数据记录?

时间:2018-09-18 09:50:21

标签: python pandas dataframe

我的数据类似于:

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表示温度记录的时间(temp1temp2
dcity1dcity2表示每月的一天(一月)

我想仅根据时间过滤数据。如何获得时间(time107:20:0013:50:00之间的所有记录?

3 个答案:

答案 0 :(得分:1)

我会做类似的事情:

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

PS:如果您提供一种生成随机样本的简单方法,则测试起来会更容易。

答案 1 :(得分:1)

您可以创建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')]

答案 2 :(得分:0)

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"))]