如果我为例如创建否定Timedelta
0.5小时,内部表示如下:
In [2]: pd.Timedelta('-0.5h')
Out[2]: Timedelta('-1 days +23:30:00')
如何以str
的形式取回此Timedelta
的{{1}})代表?
我想显示这些增量,并要求用户计算表达式-1天+某些东西有点奖励。
答案 0 :(得分:1)
我无法为您添加评论,因此请在此处添加评论。不知道这是否有帮助,但我认为你可以使用python humanize。
import humanize as hm
hm.naturaltime((pd.Timedelta('-0.5h')))
输出:
'30 minutes from now'
答案 1 :(得分:0)
好的,我会和一个黑客一起过日期:
sign = ''
date = pd.to_datetime('today')
if delta.total_seconds() < 0:
sign = '-'
date = date - delta
else:
date = date + delta
print '{}{:%H:%M}'.format(sign, date.to_pydatetime())
答案 2 :(得分:0)
您可以使用Pandas timedelta的components
import pandas as pd
t = pd.Timedelta('-0.5h')
print t.components
>> Components(days=-1L, hours=23L, minutes=30L, seconds=0L, milliseconds=0L, microseconds=0L, nanoseconds=0L)
您可以使用
访问每个组件print t.components.days
>> -1
print t.components.hours
>> 23
print t.components.minutes
>> 30
其余的就是格式化。
这是一个完全无法用于系列数据的黑客,但....
import pandas as pd
import numpy as np
t = pd.Timedelta('-0.5h').components
mins = t.days*24*60 + t.hours*60 + t.minutes
print str(np.sign(mins))[0]+str(divmod(abs(mins), 60)[0]).zfill(2)+':'+str(divmod(abs(mins), 60)[1]).zfill(2)
>> -00:30
答案 3 :(得分:0)
我正在寻找类似的东西(见https://github.com/pandas-dev/pandas/issues/17232)
我不确定它是否会在Pandas中实现,所以这是一个解决方法
import pandas as pd
def timedelta2str(td, display_plus=False, format=None):
"""
Parameters
----------
format : None|all|even_day|sub_day|long
Returns
-------
converted : string of a Timedelta
>>> td = pd.Timedelta('00:00:00.000')
>>> timedelta2str(td)
'0 days'
>>> td = pd.Timedelta('00:01:29.123')
>>> timedelta2str(td, display_plus=True, format='sub_day')
'+ 00:01:29.123000'
>>> td = pd.Timedelta('-00:01:29.123')
>>> timedelta2str(td, display_plus=True, format='sub_day')
'- 00:01:29.123000'
"""
td_zero = pd.Timedelta(0)
sign_sep = ' '
if td >= td_zero:
s = td._repr_base(format=format)
if display_plus:
s = "+" + sign_sep + s
return s
else:
s = timedelta2str(-td, display_plus=False, format=format)
s = "-" + sign_sep + s
return s
if __name__ == "__main__":
import doctest
doctest.testmod()