【发布时间】:2014-05-03 02:09:32
【问题描述】:
我有一个 pandas 数据框,其中包含这样的时间戳
time_0 time_1 time_2 time_3
21/03/2014 16:17 21/03/2014 15:40 21/03/2014 14:55 21/03/2014 12:50
21/03/2014 16:29 21/03/2014 16:26 21/03/2014 16:23 21/03/2014 16:21
04/07/2012 13:43 04/07/2012 13:37 04/07/2012 13:34 04/07/2012 13:29
19/03/2014 01:41 18/03/2014 01:19 17/03/2014 00:50 05/03/2014 22:30
21/01/2010 17:22 21/01/2010 17:21 21/01/2010 17:21 21/01/2010 17:21
我想将每一列的差异与下一列(如果您愿意,可以使用时间增量)。我想要的输出是:time_0-time_1、time_1-time_2、time_2-time_3 等。
我在做简单的 column[i]-column[i+1] 时遇到的问题是这种错误:
Traceback (most recent call last):
File "D:\TwitterFakeDetect\src\root\userinforetrieval\reformat.py", line 22, in <module>
deltadatas[column_names[0]]=deltadatas[column_names[0]]-deltadatas[column_names[1]]
File "C:\Users\SC5\Anaconda\lib\site-packages\pandas\core\ops.py", line 496, in wrapper
arr = na_op(lvalues, rvalues)
File "C:\Users\SC5\Anaconda\lib\site-packages\pandas\core\ops.py", line 449, in na_op
result[mask] = op(x[mask], y[mask])
TypeError: unsupported operand type(s) for -: 'str' and 'str'
所以我认为这不起作用,因为我有字符串而不是日期。我创建了一个函数来转换我的数据框:
def convert_string_to_date(x):
datetime.strptime(i, '%d/%m/%Y %H:%M')
然后使用 pandas 内置的 apply 函数。但后来,我意识到我的日期实际上都不是字符串,所以这并不能真正解决问题。
Traceback (most recent call last):
File "D:\TwitterFakeDetect\src\root\userinforetrieval\reformat.py", line 14, in <module>
deltadatas.apply(convert_string_to_date, axis=1)
File "C:\Users\SC5\Anaconda\lib\site-packages\pandas\core\frame.py", line 3424, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\SC5\Anaconda\lib\site-packages\pandas\core\frame.py", line 3494, in _apply_standard
results[i] = func(v)
File "D:\TwitterFakeDetect\src\root\userinforetrieval\reformat.py", line 12, in convert_string_to_date
datetime.strptime(i, '%d/%m/%Y %H:%M')
TypeError: ('must be string, not int', u'occurred at index 0')
总而言之,有没有办法检查我的数据框内容的类型,确定为什么我不能像我想象的那样轻松地减去我的列?
感谢您的帮助!我真的被这个卡住了!
【问题讨论】:
标签: python string pandas apply timedelta