2016-07-06 37 views
2

我有時間的數據的數據幀格式如何總結的時間在數據幀

hh:mm:ss 
hh:mm:ss 

(字符串類型)

我需要能夠總結的值(以獲得總時間)在一些列中。我想知道是否有人有任何建議,以最好的方式來做到這一點,並獲得相同格式的總和。

+0

是整個事情一個字符串,或每一行?你只是想要對每一個進行總和? – Kupiakos

+0

它是一個熊貓數據框?如果是這樣,你可以添加熊貓標籤嗎? – ayhan

+0

每行是一個字符串 – LMLPP

回答

3

你可以做到這一點使用timedelta:

import pandas as pd 
import datetime 

data = {'t1':['01:15:31', 
       '00:47:15'], 
     't2':['01:13:02', 
       '00:51:33'] 
     } 

def make_delta(entry): 
    h, m, s = entry.split(':') 
    return datetime.timedelta(hours=int(h), minutes=int(m), seconds=int(s)) 

df = pd.DataFrame(data) 
df = df.applymap(lambda entry: make_delta(entry)) 

df['elapsed'] = df['t1'] + df['t2'] 

In [23]: df 
Out[23]: 
     t1  t2 elapsed 
0 01:15:31 01:13:02 02:28:33 
1 00:47:15 00:51:33 01:38:48 

編輯:我看你需要列要做到這一點,而不是排。在這種情況下做同樣的事情,但:

In [24]: df['t1'].sum() 
Out[24]: Timedelta('0 days 02:02:46') 
+0

謝謝!有關如何將此應用於數據幀的少數特定行的任何建議? – LMLPP

+0

當然,在'applymap'這行,而不是'df = df.applymap'你可以做'df [[col1','col2']] = df [['col1','col2']]。 applymap ...' – Jeff

1

也許嘗試使用datetime.timedelta

import re 
from datetime import timedelta 

_TIME_RE = re.compile(r'(\d+):(\d+):(\d+)') 

def parse_timedelta(line): 
    # Invalid lines (such as blank) will be considered 0 seconds 
    m = _TIME_RE.match(line) 
    if m is None: 
     return timedelta() 
    hours, minutes, seconds = [int(i) for i in m.groups()] 
    return timedelta(hours=hours, minutes=minutes, seconds=seconds) 

def format_timedelta(delta): 
    hours, rem = divmod(delta.seconds + delta.days * 86400, 3600) 
    minutes, seconds = divmod(rem, 60) 
    return '{:02}:{:02}:{:02}'.format(hours, minutes, seconds) 

如果data是包含行的列表:

print(format_timedelta(sum(parse_timedelta(line) for line in data))) 
3

您可以使用to_timedeltasum

import pandas as pd 

df = pd.DataFrame({'A': ['18:22:28', '12:15:10']}) 

df['A'] = pd.to_timedelta(df.A) 

print (df) 
     A 
0 18:22:28 
1 12:15:10 

print (df.dtypes) 
A timedelta64[ns] 
dtype: object 

print (df.A.sum()) 
1 days 06:37:38 
+0

'1天06:37:38'違背了「格式相同」的要求。 'timedelta64'與'strftime'等價嗎? – Kupiakos