运动数据的时间格式(性能/计时)



我想用以下格式表示我拥有的一些数据:120小时24分钟45秒。我花了一些时间寻找在Python或Pandas中使用的合适的格式化函数,但找不到任何与我需要的相应的函数。

我的数据看起来是这样的:

197小时54分0秒

200小时28分49秒

147小时13分58秒

datetime.time可以工作,但我的小时数限制在[0,23]的范围内。

我可以使用我自己的格式化风格,但我更喜欢";标准格式";

您想要使用Timedelta对象。datetime也有一个,但我更喜欢pandas

import pandas as pd
td = pd.Timedelta('200hr 28min 49sec')

您可以对时间增量进行加法、减法和除法运算。若要进行更多计算,您可能需要使用td.total_seconds()

但打印时间增量会给你一种不同的格式:

>>> td
Timedelta('8 days 08:28:49')

解决方案:编写自己的格式函数

def timedelta_to_str(td):
h = td // pd.Timedelta('1h')
td -= pd.Timedelta(hours = h)
m = td // pd.Timedelta('1m')
td -= pd.Timedelta(minutes = m)
s = td.seconds
return f'{h}hr {m}min {s}sec'
>>> timedelta_to_str(td)
200hr 28min 49sec

要在DataFrame中使用此格式,您可能需要使用此破解:

pd.Timedelta.__repr__ = timedelta_to_str

这将更改所有Timedelta对象的默认表示形式!

或者你可能想使用继承来使它变得超级干净:

class myTimedelta(pd.Timedelta):
def __repr__(self):
td = pd.Timedelta(self) # make a copy
h = td // pd.Timedelta('1h')
td -= pd.Timedelta(hours = h)
m = td // pd.Timedelta('1m')
td -= pd.Timedelta(minutes = m)
s = td.seconds
return f'{h}hr {m}min {s}sec'
>>> myTimedelta('200hr 28min 49sec')
200hr 28min 49sec
>>> myTimedelta('200hr 28min 49sec') + myTimedelta('1hr')
201hr 28min 49sec

您可以创建由时间增量填充的列:

df['td'] = pd.to_timedelta(df["data"])
print (df)
data              td
0   197hr 54min 0sec 8 days 05:54:00
1  200hr 28min 49sec 8 days 08:28:49
2   231hr 7min 15sec 9 days 15:07:15
3  228hr 36min 13sec 9 days 12:36:13
4   221hr 36min 0sec 9 days 05:36:00
5    222hr 8min 6sec 9 days 06:08:06

最新更新