如何找到时间的平均值,例如 '0:00:34.805936'、'0:01:17.946625'、'0:01:41.294841'(小时:分钟:秒),它们在字符串中给出

问题描述 投票:0回答:3

时间的平均值

我尝试了 df[].mean() 方法,但它不起作用。应该还有改用的,我找不到

python time mean
3个回答
0
投票

你可以利用

strptime
将它们解析成一个
datetime
对象,然后使用
timedelta
解析的值构造一个
datetime

之后,将值相加并除以长度得到平均值。

from datetime import datetime, timedelta

def stringToTimeDelta(str):
    dt = datetime.strptime(str, "%H:%M:%S.%f")
    return timedelta(hours=dt.hour, minutes=dt.minute, seconds=dt.second, microseconds=dt.microsecond)

input = ["0:00:34.805936", "0:01:17.946625", "0:01:41.294841"]

# Convert string to timedelta
parsed = [stringToTimeDelta(x) for x in input]

# Maths operation on timedelta
print(sum(parsed, timedelta(0)) / len(parsed))

0
投票

首先将列转换为

timedelta

import pandas as pd

df = pd.DataFrame({'elapsed': ['0:00:34.805936', '0:01:17.946625', '0:01:41.294841']})
df.elapsed = pd.to_timedelta(df.elapsed)
print(df.elapsed.mean())

输出:

0 days 00:01:11.349134

0
投票

一个更简单的解决方案是使用 .split() 函数。

time = "0:01:17.946625"
some_list = time.split(":")

只要看到“:”,就会拆分字符串。现在的名单是: [“0”,“01”,“17.946625”] 然后,使用列表理解将它们转换为整数。

int_list = [int(item) for item in some_list]

现在,清单是 [0, 1, 17.946625] 然后,您可以将此列表转换为秒数。

hours_to_seconds = int_list[0] * 3600
mins_to_seconds = int_list[1] * 60
seconds = hours_to_seconds + mins_to_seconds + int_list[2]

现在,你有时间了。您可以通过将所有秒数存储在列表中来计算平均值。

time_list = [val1, val2, val3]  # this list should have the seconds that you calculated
average = sum(time_list) / len(time_list)

现在,你有平均时间。请记住,这是获取平均时间的一种极其简单且效率低下的方法,其他答案肯定会更复杂。

© www.soinside.com 2019 - 2024. All rights reserved.