The semantic of the frequencies "D" and "24H" in 'date_range' has changed in pandas 0.15.0: they are now both equivalent to a "calendar daily" frequency, ie local time is kept the same across DST transition:
In [1]: import pandas as pd;pd.__version__
Out[1]: '0.15.0'
In [2]: list(pd.date_range(pd.Timestamp("2014-10-24 06:00", tz="Europe/Paris"), periods=4, freq="D"))
Out[2]:
[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris', offset='D'),
Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris', offset='D'),
Timestamp('2014-10-26 06:00:00+0100', tz='Europe/Paris', offset='D'),
Timestamp('2014-10-27 06:00:00+0100', tz='Europe/Paris', offset='D')]
In [3]: list(pd.date_range(pd.Timestamp("2014-10-24 06:00", tz="Europe/Paris"), periods=4, freq="24H"))
Out[3]:
[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris', offset='24H'),
Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris', offset='24H'),
Timestamp('2014-10-26 06:00:00+0100', tz='Europe/Paris', offset='24H'),
Timestamp('2014-10-27 06:00:00+0100', tz='Europe/Paris', offset='24H')]
But what if we do want a true "24H" frequency ? I think "D" and "24H" should not share the same semantic, Out[2] is OK but Out[3] should be:
[Timestamp('2014-10-24 06:00:00+0200', tz='Europe/Paris'),
Timestamp('2014-10-25 06:00:00+0200', tz='Europe/Paris'),
Timestamp('2014-10-26 05:00:00+0100', tz='Europe/Paris'),
Timestamp('2014-10-27 05:00:00+0100', tz='Europe/Paris')]
Comment From: rockg
See #7825 for a similar discussion. There is a comment mentioning that 24H and D are equivalent in the context of date_range. To me 24H should be what you describe and D should retain its current behavior (did they used to be different?).
Comment From: broessli
Thx for the link, this is indeed the same issue, hope others will agree with us that "D" should be != "24H". They always have had the same semantic, but in previous pandas versions "D" and "24H" meant true 24 hours intervals: one just had to accept that "D" was exactly 24 hours to make sense of date_range behavior. Now with pandas 0.15.0, "D" and "24H" stand for "calendar daily" frequencies and it is harder to think of "24H" as a "calendar day" which can have 23, 24 or 25 hours.
Comment From: jreback
@rockg is this a dupe of that TL;DR discussion in #7825 (well I did read it, but many issues brought up)!
Comment From: jreback
consolidated to #20633