Pandas: Melhor exibição de Timedelta negativo

Criado em 11 ago. 2017  ·  3Comentários  ·  Fonte: pandas-dev/pandas

Amostra de código, um exemplo que pode ser copiado e colado, se possível

In [2]: pd.to_timedelta(0, unit='ms') - pd.to_timedelta(123, unit='ms')
Out[2]: Timedelta('-1 days +23:59:59.877000')

Descrição do Problema

Timedelta('-1 days +23:59:59.877000') não é uma exibição muito clara de um negativo Timedelta

Poderia ser melhor (para muitos usos) exibir Timedelta negativos como Timedelta('0 days -00:00:00.123000') ou Timedelta('-0 days 00:00:00.123000')

Enhancement Output-Formatting Timedelta

Comentários muito úteis

Eu diria que realmente vale a pena, pois a representação atual do número negativo é realmente muito confusa.

Mas sobre quebrar a consistência, eu acho que a representação da string para timedeltas negativos não foi feita para ter qualquer tipo de usabilidade em mente. Eu encontrei a seguinte discussão (basicamente tudo que consegui encontrar sobre isso):

https://lists.gt.net/python/dev/1129944

Alguém se lembra do motivo desse comportamento?

Não me lembro de nenhum argumento melhor do que o que escrevi na documentação: "String
representações de objetos timedelta são normalizadas de forma semelhante a seus
representação interna. "

Eu acho que seria melhor ter a implementação padrão do python da string alterada (em vez de fazer isso de forma ad-hoc para cada projeto diferente, incluindo pandas), mas como não será o caso, acredito que é um boa ideia adicionar aos pandas, porque do jeito que está é muito pouco intuitivo.
Não consigo pensar em um caso em que alguém preferisse ao lidar com timedeltas negativos.

Todos 3 comentários

xref # 15633 Estamos seguindo a (confusa) liderança de python aqui, mas suponho que poderíamos quebrar na 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'

Suponho, embora não tenha certeza se vale a pena a inconsistência aqui.

Eu diria que realmente vale a pena, pois a representação atual do número negativo é realmente muito confusa.

Mas sobre quebrar a consistência, eu acho que a representação da string para timedeltas negativos não foi feita para ter qualquer tipo de usabilidade em mente. Eu encontrei a seguinte discussão (basicamente tudo que consegui encontrar sobre isso):

https://lists.gt.net/python/dev/1129944

Alguém se lembra do motivo desse comportamento?

Não me lembro de nenhum argumento melhor do que o que escrevi na documentação: "String
representações de objetos timedelta são normalizadas de forma semelhante a seus
representação interna. "

Eu acho que seria melhor ter a implementação padrão do python da string alterada (em vez de fazer isso de forma ad-hoc para cada projeto diferente, incluindo pandas), mas como não será o caso, acredito que é um boa ideia adicionar aos pandas, porque do jeito que está é muito pouco intuitivo.
Não consigo pensar em um caso em que alguém preferisse ao lidar com timedeltas negativos.

Esta página foi útil?
0 / 5 - 0 avaliações