Reputation: 1292
I have a Pandas DataFrame with a DatetimeIndex and one column MSE Loss
the index is formatted as follows:
DatetimeIndex(['2015-07-16 07:14:41', '2015-07-16 07:14:48',
'2015-07-16 07:14:54', '2015-07-16 07:15:01',
'2015-07-16 07:15:07', '2015-07-16 07:15:14',...]
It includes several days.
I want to select all the rows (all times) of a particular days without specifically knowing the actual time intervals.
For example: Between 2015-07-16 07:00:00
and 2015-07-16 23:00:00
I tried the approach outlined here: here
But df[date_from:date_to]
outputs:
KeyError: Timestamp('2015-07-16 07:00:00')
So it wants exact indices. Furthermore, I don't have a date
column. Only an index with the dates.
What is the best way to select a whole day by just providing a date 2015-07-16
and then how could I select a specific time range within a particular day?
Upvotes: 19
Views: 27540
Reputation: 2147
You can use the panda function between_time
.
the_timed_df=df["my_time_column"].between_time(date_from,date_to)
Should do what you want if I did not mess some detail up :-)
Upvotes: 0
Reputation: 321
You can use truncate
:
begin = pd.Timestamp('2015-07-16 07:00:00')
end = pd.Timestamp('2015-07-16 23:00:00')
df.truncate(before=begin, after=end)
Upvotes: 8
Reputation: 7038
Option 1:
Sample df:
df
a
2015-07-16 07:14:41 12
2015-07-16 07:14:48 34
2015-07-16 07:14:54 65
2015-07-16 07:15:01 34
2015-07-16 07:15:07 23
2015-07-16 07:15:14 1
It looks like you're trying this without .loc
(won't work without it):
df.loc['2015-07-16 07:00:00':'2015-07-16 23:00:00']
a
2015-07-16 07:14:41 12
2015-07-16 07:14:48 34
2015-07-16 07:14:54 65
2015-07-16 07:15:01 34
2015-07-16 07:15:07 23
2015-07-16 07:15:14 1
Option 2:
You can use boolean indexing on the index:
df[(df.index.get_level_values(0) >= '2015-07-16 07:00:00') & (df.index.get_level_values(0) <= '2015-07-16 23:00:00')]
Upvotes: 21