如何在Python中为hh:mm:ss格式添加整数(秒)? [英] How to add integer (seconds) to hh:mm:ss format in Python?

查看:374
本文介绍了如何在Python中为hh:mm:ss格式添加整数(秒)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆