Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: Support datetime.time objects with tzinfo in between_time and at_time #24043

Closed
flyjuice opened this issue Dec 2, 2018 · 4 comments

Comments

@flyjuice
Copy link

commented Dec 2, 2018

The functions for DataFrame, "between_time" and "at_time" are unfortunately not time zone aware.

I suggest adding a timezone parameter to these functions to clearly specify which time zone the requested time belongs to. The sampler should take into account the time zone of data frame, and the supplied time zone.

It will also be interesting to be able to sample at a specific time both daylight savings adjustment aware and agnostic. For example it will be interesting to sample at every 09:00 New York time (whether it is summer time or winter time, and irrespective of how we stored the time in our dataframe). For this a time zone parameter will not be sufficient, a time zone history will need to be supplied.

Time zone history for a specific city can be obtained by the user and supplied to the function:
https://www.timeanddate.com/time/zone/usa/new-york

@gfyoung

This comment has been minimized.

Copy link
Member

commented Dec 2, 2018

@cozgenc : Thanks for reporting this! Could you provide an example to illustrate the concern that you bring up in the first line?

cc @mroeschke

@mroeschke

This comment has been minimized.

Copy link
Member

commented Dec 3, 2018

between_time and at_time already function when the index is tz-aware (the specified times are local to that timezone). I'm also not clear of the primary concern.

In [1]: dti = pd.date_range('2018', periods=3, freq='H', tz='US/Pacific')

In [4]: df
Out[4]:
                           0
2018-01-01 00:00:00-08:00  0
2018-01-01 01:00:00-08:00  1
2018-01-01 02:00:00-08:00  2

In [5]: df.between_time('1:00', '2:00')
Out[5]:
                           0
2018-01-01 01:00:00-08:00  1
2018-01-01 02:00:00-08:00  2

In [6]: df.at_time('1:00')
Out[6]:
                           0
2018-01-01 01:00:00-08:00  1

@mroeschke mroeschke added the Needs Info label Dec 3, 2018

@flyjuice

This comment has been minimized.

Copy link
Author

commented Dec 3, 2018

Please tell me how you will be able to get the rows for US/Eastern 09:00am, if the dataframe time zone is set to Europe/Berlin for example without actually accounting for time difference?

You are simply creating dependency between the code that prepared the dataframe, and the code that consumes the dataframe. If you add timezone parameter to these functions you may explicitly specify which time you are talking about. Time without a timezone doesn't represent a universal point in time.

@mroeschke

This comment has been minimized.

Copy link
Member

commented Dec 3, 2018

When using at_time and between_time, specified arguments are assumed to be in the local time relative to the timezone of the DatetimeIndex. Therefore, you can use tz_convert to switch between timezones when indexing with these methods.

However, it appears that currently passing datetime.time objects with tzinfo are not supported yet, which would address your primary concern I believe:

In [3]: df
Out[3]:
                           0
2018-01-01 00:00:00-08:00  0
2018-01-01 01:00:00-08:00  1
2018-01-01 02:00:00-08:00  2

In [8]: t_eastern = time(4, tzinfo=pytz.timezone('US/Eastern'))

In [10]: df.at_time(t_eastern)
NotImplementedError: argument 'time' with timezone info is not supported

@mroeschke mroeschke changed the title between_time and at_time ENH: Support datetime.time objects with tzinfo in between_time and at_time Dec 3, 2018

@mroeschke mroeschke referenced this issue Feb 12, 2019
4 of 4 tasks complete

@jreback jreback added this to the 0.25.0 milestone Feb 16, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
4 participants
You can’t perform that action at this time.