2016-03-13 48 views
-1

是否有一個/兩個班輪的方式來將Python/Pandas中的時間段字符串"1h30min"轉換爲"90min"將「1h30min」字符串轉換爲Python中的分鐘數

+3

請定義「like」。它會在幾小時和幾分鐘後停止嗎?或者可以有幾天,幾周,幾年......?有空白嗎?大寫字母?標點? –

+0

它與這種格式有多遠?它會永遠是「XhYmin」嗎? – Paul

回答

1

常見的傢伙是太無聊了,讓我們一點點更具挑戰性:

from collections import defaultdict 
import re 

def humantime2minutes(s): 
    d = { 
     'w':  7*24*60, 
     'week': 7*24*60, 
     'weeks': 7*24*60, 
     'd':  24*60, 
     'day': 24*60, 
     'days': 24*60, 
     'h':  60, 
     'hr':  60, 
     'hour': 60, 
     'hours': 60, 
    } 
    mult_items = defaultdict(lambda: 1).copy() 
    mult_items.update(d) 

    parts = re.search(r'^(\d+)([^\d]*)', s.lower().replace(' ', '')) 
    if parts: 
     return int(parts.group(1)) * mult_items[parts.group(2)] + humantime2minutes(re.sub(r'^(\d+)([^\d]*)', '', s.lower())) 
    else: 
     return 0 

print(humantime2minutes('1 week 3 days 1 hour 30 min')) 
print(humantime2minutes('2h1m')) 

輸出:

14490 
121 

現在嚴重的是,有是pandas.Timedelta()

print(pd.Timedelta('1h30min')) 

輸出:

0 days 01:30:00 
1

很簡單。只是由"h"分割和轉換:

hour, minute = "1h30min".split("h") 
minutes = (60 * int(hour)) + int(minute.strip("min")) 
0

可以使用to_datetime與參數format

import pandas as pd 

s ="1h30min" 

s = pd.to_datetime(s, format='%Hh%Mmin') 
print s 
1900-01-01 01:30:00 

print type(s) 
<class 'pandas.tslib.Timestamp'> 

print s.hour * 60 + s.minute 
90 

print str(s.hour * 60 + s.minute) + 'min' 
90min 

另一個formats