我在python中有以下数据框,我试图通过将'Duration'(以秒为单位)添加到'start_time'来计算列'New 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格式。
我试图在论坛中寻找类似的查询,但无法解决这个问题。
以下是信息
data.info()
start_date 13661 non-null object
start_time 13661 non-null object
Duration 13661 non-null int64
我尝试使用日期时间
从论坛中的类似问题中获取提示data.newtime = data.start_time + datetime.timedelta(data.Duration)
当我执行此操作时收到以下错误:TypeError:timedelta days组件的不支持类型: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。
帮助表示感谢 TIA
答案 0 :(得分:3)
您可以使用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
但如果秒数更多,则输出会更改,因为还有几天:
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
也是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
的{{1}}转换为string
而丢失HH:MM:SS
(如果存在):
days
答案 1 :(得分:0)
以下是一个可以帮助您自己解决问题的代码段:
from datetime import datetime, timedelta
my_date = datetime.strptime('5/22/2017 10:37:24', '%m/%d/%Y %H:%M:%S')
my_time_diff = timedelta(seconds=216)
my_new_date = my_date + my_time_diff
print(my_new_date.strftime('%m/%d/%Y %H:%M:%S'))
有用的资源: