我想用以下格式表示一些数据: 120小时24分45秒。我花了一些时间寻找在Python或Pandas中使用的适当的格式化函数,但是找不到与我所需要的相应的函数。
我掌握的数据如下:
197小时54分0秒
200小时28分49秒
147小时13分58秒
datetime.time可以工作,但我的限制范围是0,23小时数。
我可以使用自己的格式化风格,但我更希望有一个可以使用的“标准格式”(计算偏移量,将其翻译成其他格式,等等)。
发布于 2020-09-21 10:48:34
您希望使用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发布于 2020-09-21 10:16:17
您可以创建由时间三角洲填充的列
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:06https://stackoverflow.com/questions/63990156
复制相似问题