如何在Python中为hh:mm:ss格式添加整数(秒)? [英] How to add integer (seconds) to hh:mm:ss format in Python?
问题描述
我在python中有以下数据框,试图通过在"start_time"中添加持续时间"(以秒为单位)来计算新时间"列
I have the following data frame in python where am trying to compute column 'New time' by adding 'Duration' (which is in seconds) to the 'start_time'
Serial start_date start_time Duration(seconds) New time
A 5/22/2017 10:37:24 216
A 5/22/2017 10:37:26 213
A 5/22/2017 10:37:29 3
A 5/22/2017 10:39:55 60
A 5/22/2017 10:51:50 380
A 5/22/2017 10:51:57 339
我想将持续时间添加到start_time中.持续时间以秒为单位. 预计将以hh:mm:ss格式显示新时间".
I want to add duration into start_time. The duration is in seconds. 'New time' is expected in hh:mm:ss format.
我尝试在论坛中查找类似的查询,但无法解决此问题.
I tried looking for similar queries in the forum but could not get around this.
下面是信息
data.info()
start_date 13661 non-null object
start_time 13661 non-null object
Duration 13661 non-null int64
我尝试使用datetime从论坛中的类似问题中寻求线索
I tried taking a cue from a similar problem in the forum, using datetime
data.newtime = data.start_time + datetime.timedelta(data.Duration)
当我执行此操作时,出现以下错误:TypeError:timedelta days组件的不支持的类型:Series
when i execute this am getting the following error : TypeError: unsupported type for timedelta days component: Series
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-95-fdfac1490ba5> in <module>()
----> 1 data.newtime = data.start_time + datetime.timedelta(data.Duration)
TypeError: unsupported type for timedelta days component: Series
不确定如何处理. python的新手.
Not sure how to go about it. New to python.
帮助表示赞赏 TIA
Help appreciated TIA
推荐答案
您可以使用 to_timedelta
,输出也为timedelta
:
df['New time'] = pd.to_timedelta(df['start_time']) +
pd.to_timedelta(df['Duration(seconds)'], unit='s')
print (df)
Serial start_date start_time Duration(seconds) New time
0 A 5/22/2017 10:37:24 216 10:41:00
1 A 5/22/2017 10:37:26 213 10:40:59
2 A 5/22/2017 10:37:29 3 10:37:32
3 A 5/22/2017 10:39:55 60 10:40:55
4 A 5/22/2017 10:51:50 380 10:58:10
5 A 5/22/2017 10:51:57 339 10:57:36
但是如果秒数更多,则输出也会更改,因为还有天数:
But if seconds is more, output is changed, because there are also days:
print (df)
Serial start_date start_time Duration(seconds)
0 A 5/22/2017 10:37:24 216
1 A 5/22/2017 10:37:26 213000
2 A 5/22/2017 10:37:29 3
3 A 5/22/2017 10:39:55 60
4 A 5/22/2017 10:51:50 380
5 A 5/22/2017 10:51:57 339
df['New time'] = pd.to_timedelta(df['start_time']) +
pd.to_timedelta(df['Duration(seconds)'], unit='s')
print (df)
Serial start_date start_time Duration(seconds) New time
0 A 5/22/2017 10:37:24 216 0 days 10:41:00
1 A 5/22/2017 10:37:26 213000 2 days 21:47:26
2 A 5/22/2017 10:37:29 3 0 days 10:37:32
3 A 5/22/2017 10:39:55 60 0 days 10:40:55
4 A 5/22/2017 10:51:50 380 0 days 10:58:10
5 A 5/22/2017 10:51:57 339 0 days 10:57:36
也可以添加日期时间:
Also is posible add datetime:
df['New date'] = pd.to_datetime(df['start_date']) + \
pd.to_timedelta(df['start_time']) + \
pd.to_timedelta(df['Duration(seconds)'], unit='s')
print (df)
Serial start_date start_time Duration(seconds) New date
0 A 5/22/2017 10:37:24 216 2017-05-22 10:41:00
1 A 5/22/2017 10:37:26 213 2017-05-22 10:40:59
2 A 5/22/2017 10:37:29 3 2017-05-22 10:37:32
3 A 5/22/2017 10:39:55 60 2017-05-22 10:40:55
4 A 5/22/2017 10:51:50 380 2017-05-22 10:58:10
5 A 5/22/2017 10:51:57 339 2017-05-22 10:57:36
df['New date'] = pd.to_datetime(df['start_date']) + \
pd.to_timedelta(df['start_time']) + \
pd.to_timedelta(df['Duration(seconds)'], unit='s')
print (df)
Serial start_date start_time Duration(seconds) New date
0 A 5/22/2017 10:37:24 216 2017-05-22 10:41:00
1 A 5/22/2017 10:37:26 213000 2017-05-24 21:47:26
2 A 5/22/2017 10:37:29 3 2017-05-22 10:37:32
3 A 5/22/2017 10:39:55 60 2017-05-22 10:40:55
4 A 5/22/2017 10:51:50 380 2017-05-22 10:58:10
5 A 5/22/2017 10:51:57 339 2017-05-22 10:57:36
---
如果需要将timedelta
转换为HH:MM:SS
格式的string
并丢失days
(如果存在):
---
And if need convert timedelta
to string
in format HH:MM:SS
and lost days
(if exist):
df['New time'] = pd.to_timedelta(df['start_time']) +
pd.to_timedelta(df['Duration(seconds)'], unit='s')
df['New time'] = pd.to_datetime(df['New time']).dt.strftime('%H:%M:%S')
print (df)
Serial start_date start_time Duration(seconds) New time
0 A 5/22/2017 10:37:24 216 10:41:00
1 A 5/22/2017 10:37:26 213000 21:47:26
2 A 5/22/2017 10:37:29 3 10:37:32
3 A 5/22/2017 10:39:55 60 10:40:55
4 A 5/22/2017 10:51:50 380 10:58:10
5 A 5/22/2017 10:51:57 339 10:57:36
这篇关于如何在Python中为hh:mm:ss格式添加整数(秒)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!