2017-03-12 29 views
0

我有多组日期/时间我试图在Python中操作,使用pandas模块从csv文件导入。我已经将每个条目从一个字符串转换为datetime,并且可以使用+和 - 来操作数据,但是当尝试使用sum()时会出错。具体来说:“TypeError:'Timedelta'对象不可迭代”。python中的sum timedeltas

这里是我正在使用的代码:

import pandas as pd 
import numpy as np 
from datetime import datetime 

A = pd.read_csv('filename') 
B = A['Start Time (UTCG)'] 
C = A['Stop Time (UTCG)'] 


DT_B = pd.to_datetime(B) #converting from string 
DT_C = pd.to_datetime(C) 
timediff = DT_C - DT_B 
diffsum = sum(timediff) 

其中“开始时间”和“停止时间”格式中的“2017年3月11日10:37:12.330”和B和C是列表。

我很新的python,所以如果我忽略了一些简单的道歉。如果没有日期时间的情况下处理日期/时间字符串的更简单的方法,那也不错。任何帮助获得“总和”的工作将不胜感激。谢谢!

回答

0

您可以尝试使用sum方法,该方法随熊猫系列一起正确处理。

>>> import pandas as pd 
>>> from datetime import timedelta 
>>> data = [timedelta(i) for i in range(10)] 
>>> a = pd.Series(data) 
>>> a.sum() 
Timedelta('45 days 00:00:00') 

请注意,我说的是Series而不是数据帧。当您将数据框中的确切列从数据框中拉出时,就像您这样做C = A['Stop Time (UTCG)']C的类型是Series

从第一个数据框中的另外两个创建一个新列,然后只是在该列上聚合或调用sum方法可能会更清洁。类似这样的:

>>> import pandas as pd 
>>> from datetime import datetime, timedelta 
>>> from datetime import datetime, timedelta 
>>> data1 = [datetime.now() for i in range(5)] 
>>> data2 = [datetime.now() for i in range(5)] 
>>> data = {'start': data1, 'stop': data2} 
>>> df = pd.DataFrame(data) 
>>> df 
         start      stop 
0 2017-03-11 22:38:11.606500 2017-03-11 22:38:37.474962 
1 2017-03-11 22:38:11.606509 2017-03-11 22:38:37.474971 
2 2017-03-11 22:38:11.606510 2017-03-11 22:38:37.474973 
3 2017-03-11 22:38:11.606511 2017-03-11 22:38:37.474974 
4 2017-03-11 22:38:11.606512 2017-03-11 22:38:37.474975 
>>> df.dtypes // use dtypes to make sure the types are what you think they are 
start datetime64[ns] 
stop  datetime64[ns] 
dtype: object 
>>> df['diff'] = df['stop'] - df['start'] 
>>> df['diff'].sum() 
Timedelta('0 days 00:02:09.342313') 
+0

谢谢!你对pd.series的第一个建议适用于我的目的。 – DCips

+0

@DCips如果我回答了你的问题,请将我的回答标记为正确:) –