如果我創建了一個負的Timedelta
,例如, 0.5小時後,內部表示看起來如下:以最基本的形式表示負時間點
In [2]: pd.Timedelta('-0.5h')
Out[2]: Timedelta('-1 days +23:30:00')
我怎樣才能拿回這個Timedelta
形式-00:30
的(str
)表示?
我想要顯示這些增量,並要求用戶計算表達式-1天+有點獎。
如果我創建了一個負的Timedelta
,例如, 0.5小時後,內部表示看起來如下:以最基本的形式表示負時間點
In [2]: pd.Timedelta('-0.5h')
Out[2]: Timedelta('-1 days +23:30:00')
我怎樣才能拿回這個Timedelta
形式-00:30
的(str
)表示?
我想要顯示這些增量,並要求用戶計算表達式-1天+有點獎。
好的,我會生活在一個黑客去低谷日期:
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())
我不能添加評論你所以在這裏添加。不知道這是否有幫助,但我認爲你可以使用python人性化。
import humanize as hm
hm.naturaltime((pd.Timedelta('-0.5h')))
日期:
'30 minutes from now'
這將是一個有趣的事情,但是, 「前一段時間」的隱喻在這種情況下不起作用,因爲它只是我代表的一種抵消。 – languitar
您可以使用熊貓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
然後格式化。
這是不會的系列數據攜手共砍,但是....
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
我一直在尋找類似的東西(見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()
可以使用'印刷(pd.Timedelta( ' - 0.5小時')。total_seconds()/ 60)'? – jezrael
東西更好地處理不同的時間範圍會更好 – languitar
也許更蟒蛇問題如大熊貓,檢查[這](http://stackoverflow.com/q/8408397/2901002) – jezrael