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