我有一个带datetimeindex的pandas数据框。我想创建一个包含经过时间的列。我是这样计算的:
startTime = df.index[0]
elapsed = df.index - startTime
结果:
TypeError Traceback (most recent call last)
<ipython-input-56-279fd541b1e2> in <module>()
----> 1 df.index - startTime
C:\Python27\lib\site-packages\pandas\tseries\index.pyc in __sub__(self, other)
612 return self.shift(-other)
613 else: # pragma: no cover
--> 614 raise TypeError(other)
615
616 def _add_delta(self, delta):
TypeError: 2014-07-14 14:47:57
奇怪的是,例如:
df.index[1] - startTime
返回:
datetime.timedelta(0, 1)
我认为问题的原因可能是它是一个datetimeindex而不是一个普通的series。然而,当我首先使用df.index作为数据参数创建一个新的series,然后尝试进行减法运算时,会出现大量警告,说我在隐式地将两个不兼容的类型进行转换,并且这在未来将无法工作:
timeStamps =pd.Series(data=df.index)
elapsed = timeStamps - timeStamps[0]
返回值
C:\Python27\lib\site-packages\pandas\core\format.py:1851: DeprecationWarning: Implicitly casting between incompatible kinds. In a future numpy release, this will raise an error. Use casting="unsafe" if this is intentional.
elif format_short and x == 0:
虽然我用后一种方法得到了正确的TimeDelta系列,但我不喜欢依赖已弃用的代码。有没有一种“正式”的方法来计算经过的时间?
这是我从csv文件中获取数据的一部分:
Timestamp Bubbler_Temperature_Setpoint
14-7-2014 14:47:57 13.000000
14-7-2014 14:47:58 13.000000
14-7-2014 14:47:59 13.000000
14-7-2014 14:48:00 13.000000
14-7-2014 14:48:01 13.000000
14-7-2014 14:48:02 13.000000
14-7-2014 14:48:03 13.000000
14-7-2014 14:48:04 13.000000
14-7-2014 14:48:05 13.000000
我使用'read_csv'函数将它读入数据框中:
df = pd.read_csv('test.csv',sep='\t',parse_dates='Timestamp',index_col='Timestamp')
我使用的是 pandas 0.13.1 版本。