idata_df['Total Time'] = (data_df['finsihed']).astype(int) - (data_df['Commencement Time']).astype(int)
返回值错误:invalid literal for int() with base 10: ' 8 Feb 2016 10:31'
两者的值类型都是对象。
在开始时间和完成之间获得持续时间的最简单方法是什么?
答案 0 :(得分:0)
您可以使用strptime
来解析时间格式:
from datetime import datetime
FMT = "%d %b %Y %H:%M"
start = datetime.strptime(data_df['Commencement Time'], FMT)
stop = datetime.strptime(data_df['finished'], FMT)
total_time = (stop - start).total_seconds()
注意:total_seconds()
会返回一个浮点数,因此如果您的目的无法接受,则需要将其转换为整数。
答案 1 :(得分:0)
df = pd.DataFrame(np.transpose([[' 8 Feb 2016 10:31', ' 8 Feb 2016 12:31', ' 8 Feb 2016 17:31'],
[' 10 Feb 2016 10:31', ' 11 Feb 2016 12:31', ' 13 Feb 2016 12:31']]), columns=['Start','Stop'])
print(df)
Start Stop
0 8 Feb 2016 10:31 10 Feb 2016 10:31
1 8 Feb 2016 12:31 11 Feb 2016 12:31
2 8 Feb 2016 17:31 13 Feb 2016 12:31
您需要将这些转换为dtype
datetime
,因为它们目前为object
(使用df.dtypes
进行检查)。
您可以明确地执行此操作:
df.Start = pd.to_datetime(df.Start)
df.Stop = pd.to_datetime(df.Stop)
或使用apply:
df = df.apply(lambda x: pd.to_datetime(x))
现在差异起作用了:
df['Total Time'] = df.Stop - df.Start
print(df)
Start Stop Total Time
0 2016-02-08 10:31:00 2016-02-10 10:31:00 2 days 00:00:00
1 2016-02-08 12:31:00 2016-02-11 12:31:00 3 days 00:00:00
2 2016-02-08 17:31:00 2016-02-13 12:31:00 4 days 19:00:00