Python 计算DatetimeIndex和Timestamp列之间的差异

Python 计算DatetimeIndex和Timestamp列之间的差异,python,pandas,python-datetime,Python,Pandas,Python Datetime,在以下示例中: import datetime import pandas base = datetime.datenow() rr = [base - datetime.timedelta(days=x) for x in range(23)] ee = [base - datetime.timedelta(days=x+3) for x in range(23)] qq = pandas.DataFrame(data=rr, index=ee, columns=['datacol'])

在以下示例中:

import datetime
import pandas

base = datetime.datenow()
rr = [base - datetime.timedelta(days=x) for x in range(23)]
ee = [base - datetime.timedelta(days=x+3) for x in range(23)]
qq = pandas.DataFrame(data=rr, index=ee, columns=['datacol'])

qq.index - qq.datacol.values
最后一行引发TypeError:

In [11]: qq.index-qq.datacol.values
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-e850e726adac> in <module>()
----> 1 qq.index-qq.datacol.values

/usr/local/lib/python2.7/dist-packages/pandas/tseries/index.pyc in __sub__(self, other)
    556             return self.shift(-other)
    557         else:  # pragma: no cover
--> 558             raise TypeError(other)
    559 
    560     def _add_delta(self, delta):

TypeError: ['2013-11-08T21:18:50.478689000-0800' '2013-11-07T21:18:50.478689000-0800'
[11]中的
:qq.index-qq.datacol.values
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 qq.index-qq.datacol.values
/usr/local/lib/python2.7/dist-packages/pandas/tseries/index.pyc in_u__________(self,other)
556返回自动换档(-其他)
557其他:#布拉格语:无封面
-->558提升类型错误(其他)
559
560定义添加增量(自,增量):
类型错误:['2013-11-08T21:18:50.478689000-0800''2013-11-07T21:18:50.478689000-0800'
如何获得索引和列之间的差异


注意:来自datetime对象,但索引自动成为时间戳。

下面的示例演示了您的问题:

In [11]: rng = pd.date_range('2012-01-01', '2012-01-06')

In [12]: df = pd.DataFrame(rng, rng + 10)

In [13]: df
Out[13]: 
                             0
2012-01-11 2012-01-01 00:00:00
2012-01-12 2012-01-02 00:00:00
2012-01-13 2012-01-03 00:00:00
2012-01-14 2012-01-04 00:00:00
2012-01-15 2012-01-05 00:00:00
2012-01-16 2012-01-06 00:00:00
您可以直接在numpy中执行(索引和列0的)差异:

In [14]: df.index.values - df[0].values
Out[14]: 
array([864000000000000, 864000000000000, 864000000000000, 864000000000000,
       864000000000000, 864000000000000], dtype='timedelta64[ns]')
并将其转换为一个系列:

In [15]: pd.Series(df.index.values - df[0].values)
Out[15]: 
0   10 days, 00:00:00
1   10 days, 00:00:00
2   10 days, 00:00:00
3   10 days, 00:00:00
4   10 days, 00:00:00
5   10 days, 00:00:00
dtype: timedelta64[ns]

老实说,我认为pandas(timedelta)的这一部分目前正在改进,因此在以后的版本中可能会有更好的方法…

此代码不运行。什么是
base
?另外,您正在使用
timedelta
值编制索引。您想要实际日期吗?请提供一些示例数据(最好不只是实际转储,而是由python中的示例代码可执行文件生成)、您收到的错误和预期结果