在python中总和timedeltas

时间:2017-03-12 05:07:21

标签: python datetime

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

以下是我使用的代码:

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很陌生,所以如果我忽略了一些简单的事情,那就道歉了。如果有更简单的方法来操作没有日期时间的日期/时间字符串,那也会很好。任何帮助得到"总和"工作将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用pandas系列附带的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推送到>>> 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') 时,将精确列从数据框中拉出来。

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

if