Pandas: Better display of negative Timedelta

Created on 11 Aug 2017  ·  3Comments  ·  Source: pandas-dev/pandas

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')

Enhancement Output-Formatting Timedelta

Most helpful comment

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.

All 3 comments

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'

I suppose, though not really sure its worth the inconsistency here.

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.

Was this page helpful?
0 / 5 - 0 ratings