2017-03-27 35 views
1

我有一個CSV文件,其中包含會話的開始時間和結束時間。扣減TimeDate列

我想了解我該怎麼做結束時間 - 開始時間來獲得會話的持續時間。

到目前爲止,我有這個和它的作品

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) 

,但我想這樣做,整個列一次。

回答

1

要從csv導入然後操作日期,​​是要走的路。由於您提供的關於數據的唯一信息是開始時間和結束時間,因此我會證明這一點。

代碼:

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] 
+0

嘿斯蒂芬,我得到這個錯誤,當我運行它... TypeError:parser_f()有一個意外的關鍵字參數'infer_datetime_format' – Silas

+0

什麼版本的熊貓你使用? –

+0

0.12.0這是版本 – Silas

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) 

我認爲這應該有效。

+0

嘿裏克,沒有代碼我張貼的作品很好,但我有一個很長的呃包含日期和時間的start_time和end_time列表。我該怎麼做,並創建一個新的列 – Silas

+0

嗨西拉斯,謝謝你讓我知道......我錯過了它的工作。抱歉。但似乎斯蒂芬勞克給你提供了一個有趣的答案。我爲我的誤會道歉。 – Rick