You can use between
I Generated a sample dataframe with
import datetime
d = {'timestamp': pd.Series([datetime.datetime.now() +
datetime.timedelta(hours=i) for i in range(20)]),
'volume': pd.Series([s for s in range(20)])}
df = pd.DataFrame(d)
df['timeframe']
is
0 2017-02-13 22:37:54.515840
1 2017-02-13 23:37:54.515859
2 2017-02-14 00:37:54.515865
3 2017-02-14 01:37:54.515870
4 2017-02-14 02:37:54.515878
5 2017-02-14 03:37:54.515884
6 2017-02-14 04:37:54.515888
...
17 2017-02-14 15:37:54.515939
18 2017-02-14 16:37:54.515943
19 2017-02-14 17:37:54.515948
df.dtypes
timestamp datetime64[ns]
volume int64
dtype: object
As in your example dtype
of df['timestamp']
is object
you can do
df['timestamp'] = pd.to_datetime(df['timestamp'], coerce=True)
By setting param coerce=True
if the conversion fails for any particular string then those rows are set to NaT
.
Then filtering can be done using between
as below
df[df.timestamp.dt.strftime('%H:%M:%S').between('11:00:00','18:00:00')]
will return
13 2017-02-14 11:37:54.515922 13
14 2017-02-14 12:37:54.515926 14
15 2017-02-14 13:37:54.515930 15
16 2017-02-14 14:37:54.515935 16
17 2017-02-14 15:37:54.515939 17
18 2017-02-14 16:37:54.515943 18
19 2017-02-14 17:37:54.515948 19