Code Sample, a copy-pastable example if possible
In [2]: pd.to_timedelta(0, unit='ms') - pd.to_timedelta(123, unit='ms')
Out[2]: Timedelta('-1 days +23:59:59.877000')
Problem description
Timedelta('-1 days +23:59:59.877000')
is not a very clear display of a negative Timedelta
It could be better (for many usages) to display negative Timedelta
like Timedelta('0 days -00:00:00.123000')
or Timedelta('-0 days 00:00:00.123000')
Comment From: chris-b1
xref #15633 We're following python's (confusing) lead here, but I suppose we could break on the repr.
In [2]: import datetime
In [3]: datetime.timedelta() - datetime.timedelta(milliseconds=123)
Out[3]: datetime.timedelta(-1, 86399, 877000)
In [4]: str(datetime.timedelta() - datetime.timedelta(milliseconds=123))
Out[4]: '-1 day, 23:59:59.877000'
Comment From: jreback
I suppose, though not really sure its worth the inconsistency here.
Comment From: Sup3rGeo
I would say it is really worth it, as the current representation for negative number is really really confusing.
But about breaking consistency, I guess the string representation for negative timedeltas was not meant to have any kind of usability in mind. I found the following discussion (basically all I could found about it):
https://lists.gt.net/python/dev/1129944
Does anyone remember the rationale for this behaviour?
I don't recall any better rationale than what I wrote in the docs: "String representations of timedelta objects are normalized similarly to their internal representation."
I guess it would be better to have python's default implementation of the string changed (instead of doing it in an ad-hoc fashion for every different project, including pandas), but as this won't be the case, I believe it is a good idea to add to pandas, because the way it is is very non intuitive. I can't think of a case where anyone would prefer it when dealing with negative timedeltas.
Comment From: veenstrajelmer
I realize this is an old issue, but this would be amazing. I ran into this issue when plotting timedelta's where I found the negative values to be displayed in a non intuitive form. I also encounter this in TimedeltaIndex
and plain pd.Timedelta
.
For the axis labels, I have slighly adjusted TimeSeries_TimedeltaFormatter to display timedelta axis labels in a more intuitive format: https://github.com/Deltares-research/kenmerkendewaarden/blob/ff47a2c3f2e575726cb5ef696c6ef266de1ed776/kenmerkendewaarden/utils.py#L15-L48. I am posting this here just to say that this function might also require an update.
@mroeschke @jbrockmendel if a PR would be contributed, would it still be considered to be added? I now have a workaround in my own code that I would like to discontinue. The workaround only works for plotting, but I guess it also should work for prints of dataframes/series, not sure how yet. Some hint would be helpful here.
Comment From: jbrockmendel
I'd be open to something more readable, but won't lose sleep over it.