Skip to content

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

Closed
@flyjuice

Description

@flyjuice

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

Activity

gfyoung

gfyoung commented on Dec 2, 2018

@gfyoung
Member

@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

mroeschke commented on Dec 3, 2018

@mroeschke
Member

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
added
Needs InfoClarification about behavior needed to assess issue
on Dec 3, 2018
flyjuice

flyjuice commented on Dec 3, 2018

@flyjuice
Author

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

mroeschke commented on Dec 3, 2018

@mroeschke
Member

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
added
TimezonesTimezone data dtype
IndexingRelated to indexing on series/frames, not to indexes themselves
and removed
Needs InfoClarification about behavior needed to assess issue
DataFrameDataFrame data structure
on Dec 3, 2018
changed the title [-]between_time and at_time[/-] [+]ENH: Support datetime.time objects with tzinfo in between_time and at_time[/+] on Dec 3, 2018
added this to the 0.25.0 milestone on Feb 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    DatetimeDatetime data dtypeEnhancementIndexingRelated to indexing on series/frames, not to indexes themselvesTimezonesTimezone data dtype

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

      Development

      Participants

      @jreback@gfyoung@mroeschke@flyjuice

      Issue actions

        ENH: Support datetime.time objects with tzinfo in between_time and at_time · Issue #24043 · pandas-dev/pandas