简体   繁体   English

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

[英]Time format for sport data (performance/chrono measures)

I want to represent some data I have in the following format: 120 hours, 24 minutes, 45 seconds.我想用以下格式表示我拥有的一些数据:120 小时 24 分钟 45 秒。 I spent some time looking for the appropriate formating function to use in Python or Pandas, but could not find any corresponding properly to the one I need.我花了一些时间寻找合适的格式 function 以在 Python 或 Pandas 中使用,但找不到与我需要的格式相对应的格式。

The data I have looks like this:我拥有的数据如下所示:

197hr 54min 0sec 197 小时 54 分 0 秒

200hr 28min 49sec 200 小时 28 分 49 秒

147hr 13min 58sec 147 小时 13 分 58 秒

datetime.time could work, but I'm limited in range [0, 23] for hours count. datetime.time可以工作,但我的小时数限制在 [0, 23] 范围内。

I could go with my own formating style, but I would prefer to have a "standard format" that I can work with (calculating offsets, translate it in other formats, etc.).我可以 go 使用我自己的格式样式,但我更希望有一个我可以使用的“标准格式”(计算偏移量,将其翻译成其他格式等)。

You can create column filled by timedeltas :您可以创建由timedeltas填充的列:

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

You want to use Timedelta objects.您想要使用Timedelta对象。 datetime has one too, but I prefer pandas datetime也有一个,但我更喜欢pandas

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

You can add, subtract and divide timedeltas.您可以加、减和除时间增量。 To do more calculations you might want to work with td.total_seconds() .要进行更多计算,您可能需要使用td.total_seconds()

But printing the timedelta gives you a different format:但是打印 timedelta 会给你一种不同的格式:

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

Solution: Write your own format function解决办法:自己写格式function

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

To use this format within a DataFrame you might want to use this hack:要在 DataFrame 中使用此格式,您可能需要使用此 hack:

pd.Timedelta.__repr__ = timedelta_to_str

This changes the default representation of all Timedelta Objects!这会更改所有Timedelta 对象的默认表示!

Or you might want to use inheritance to make it super clean:或者您可能想使用 inheritance 使其超级干净:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM