减去查找持续时间的时间

时间:2016-11-21 17:02:48

标签: python pandas

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'

两者的值类型都是对象。

在开始时间和完成之间获得持续时间的最简单方法是什么?

2 个答案:

答案 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