[英]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.