我的数据类似于:
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
之间的所有记录?
答案 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"))]