2017-03-22 13 views
1

如果我創建了一個負的Timedelta,例如, 0.5小時後,內部表示看起來如下:以最基本的形式表示負時間點

In [2]: pd.Timedelta('-0.5h') 
Out[2]: Timedelta('-1 days +23:30:00') 

我怎樣才能拿回這個Timedelta形式-00:30的(str)表示?

我想要顯示這些增量,並要求用戶計算表達式-1天+有點獎。

+0

可以使用'印刷(pd.Timedelta( ' - 0.5小時')。total_seconds()/ 60)'? – jezrael

+0

東西更好地處理不同的時間範圍會更好 – languitar

+0

也許更蟒蛇問題如大熊貓,檢查[這](http://stackoverflow.com/q/8408397/2901002) – jezrael

回答

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()) 
1

我不能添加評論你所以在這裏添加。不知道這是否有幫助,但我認爲你可以使用python人性化。

import humanize as hm 
hm.naturaltime((pd.Timedelta('-0.5h'))) 

日期:

'30 minutes from now' 
+0

這將是一個有趣的事情,但是, 「前一段時間」的隱喻在這種情況下不起作用,因爲它只是我代表的一種抵消。 – languitar

0

您可以使用熊貓timedelta

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 

其餘訪問每個組件的components然後格式化。

source


這是不會的系列數據攜手共砍,但是....

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 
+0

但是「只是格式化」是相當有用的,以防可能存在不同時間範圍的增量。 – languitar

+0

這是編程。讓一臺機器像人一樣「思考」確實是「非常有用的工作」。 – philshem

+0

我希望如果有人已經做過同樣的事情,一些自動化的方式。 – languitar

0

我一直在尋找類似的東西(見https://github.com/pandas-dev/pandas/issues/17232

我不確定它是否會在熊貓中實施,所以這裏是一個解決方法

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