减去TimeDate列

时间:2017-03-27 01:57:30

标签: python date csv pandas datetime

我有一个CSV文件,其中包含会话的开始时间和结束时间。

我想了解我如何做结束时间 - 开始时间来获得会话的持续时间。

到目前为止,我有这个并且它有效

start_time = "2016-11-09 18:06:17"
end_time ="2016-11-09 18:21:07"
start_dt = dt.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S') 
end_dt = dt.datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S')

diff = (end_dt - start_dt) 
duration = diff.seconds/60 
print (duration)

但我想立刻为整个专栏做这件事。

2 个答案:

答案 0 :(得分:1)

要从csv导入然后操纵日期,pandas是可行的方法。由于您提供的有关数据的唯一信息是开始和结束时间,因此我会说明。

<强>代码:

import pandas as pd
df = pd.read_csv(data, parse_dates=['start_time', 'end_time'],
                 infer_datetime_format=True)
print(df)

df['time_delta'] = df.end_time.values - df.start_time.values
print(df.time_delta)

测试数据:

from io import StringIO

data = StringIO(u'\n'.join([x.strip() for x in """
    start_time,end_time,a_number
    2013-09-19 03:00:00,2013-09-19 04:00:00,221.0797
    2013-09-19 04:00:00,2013-09-19 05:00:00,220.5083
    2013-09-24 03:00:00,2013-09-24 05:00:00,221.7733
    2013-09-24 04:00:00,2013-09-24 06:00:00,221.2493
""".split('\n')[1:-1]]))

<强>结果:

           start_time            end_time  a_number
0 2013-09-19 03:00:00 2013-09-19 04:00:00  221.0797
1 2013-09-19 04:00:00 2013-09-19 05:00:00  220.5083
2 2013-09-24 03:00:00 2013-09-24 05:00:00  221.7733
3 2013-09-24 04:00:00 2013-09-24 06:00:00  221.2493

0   01:00:00
1   01:00:00
2   02:00:00
3   02:00:00
Name: time_delta, dtype: timedelta64[ns]

答案 1 :(得分:0)

您似乎正在尝试对字符串运行diff,而不是日期时间值。

这样的事情怎么样?

from datetime import datetime

start_time = datetime(2016, 11, 12, 18, 06, 17)
end_time = datetime(2016, 11, 09, 18, 21, 07)
diff = end_time - start_time
print(diff.seconds / 60)

我认为这应该有用。

相关问题