user3142067
user3142067

Reputation: 1292

Pandas: Selecting DataFrame rows between two dates (Datetime Index)

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 datecolumn. 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

Answers (3)

Florida Man
Florida Man

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

JrtPec
JrtPec

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

Andrew L
Andrew L

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

Related Questions