Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对数据帧中的时间求和_Python_Datetime_Pandas - Fatal编程技术网

Python 如何对数据帧中的时间求和

Python 如何对数据帧中的时间求和,python,datetime,pandas,Python,Datetime,Pandas,我有一个数据帧的时间数据的格式 hh:mm:ss hh:mm:ss (输入字符串) 我需要能够将几个列中的值求和(以获取总时间)。我想知道是否有人对最好的方法有什么建议,并以相同的格式获得总和。您可以使用timedelta: import pandas as pd import datetime data = {'t1':['01:15:31', '00:47:15'], 't2':['01:13:02', '00

我有一个数据帧的时间数据的格式

hh:mm:ss
hh:mm:ss
(输入字符串)


我需要能够将几个列中的值求和(以获取总时间)。我想知道是否有人对最好的方法有什么建议,并以相同的格式获得总和。

您可以使用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')

也许可以尝试使用
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)))
您可以使用:


整个东西是一根线,还是每行?你只是想求和吗?是一个数据帧吗?如果是这样的话,你能添加熊猫标签吗?每一行都是一个字符串我希望对每一列求和。每列包含约400行以上所列格式的数据(hh:mm:ss)。很抱歉造成混淆。
1天06:37:38
违反了“相同格式”的要求。
timedelta64
是否有与
strftime
等效的值?谢谢!关于如何仅将其应用于数据帧的几个特定行的任何建议?当然,在
applymap
行中,而不是
df=df.applymap
您只需执行
df[[[col1',col2']]=df[[col1',col2']]即可。applymap…
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