2017-06-16 30 views
3

我有以下数据框。在熊猫中扣除日期时间列时返回的错误

Date Returned Start Date 
0 2017-06-02 2017-04-01 
1 2017-06-02 2017-04-01 
2 2017-06-02 2017-04-01 
3 2017-06-02 2017-02-28 
4 2017-06-02 2017-02-28 
5 2017-06-02 2016-07-20 
6 2017-06-02 2016-07-20 

两列均为datetime64

subframe[['Date Returned','Start Date']].dtypes 
Out[9]: 
Date Returned datetime64[ns] 
Start Date  datetime64[ns] 
dtype: object 

但是,当我试图找到两列日期之间的timedeltas,我得到这个错误。

subframe['Delta']=subframe['Date Returned'] - subframe['Start Date'] 

TypeError: data type "datetime" not understood 

有没有解决这个问题?我已经尝试过所有我能想到的事情,并且已经在此时拔掉了我的大部分头发。任何帮助是极大的赞赏。 I did find someone posting the same problem, but no one really answered it.

+0

它在我的电脑上正常工作。 – Ding

+0

相同的代码在我的情况下不会犯任何错误。您使用的是哪个版本?或者您可以卸载软件包并重试。 –

+0

我曾尝试卸载并重新安装熊猫。同样的结果。这是在Windows 7上运行的,但我不认为这会有所作为。 – bemery

回答

2

我在熊猫0.18.1中收到了同样的错误。这里有一个解决办法,个人开始 - 结束对迭代操作:

d['diff'] = [ret - start for start, ret in zip(d['Start'], d['Returned'])] 

d现在是:

Returned  Start  diff 
0 2017-06-02 2017-04-01 62 days 
1 2017-06-02 2017-04-01 62 days 
2 2017-06-02 2017-04-01 62 days 
3 2017-06-02 2017-02-28 94 days 
4 2017-06-02 2017-02-28 94 days 
5 2017-06-02 2016-07-20 317 days 
6 2017-06-02 2016-07-20 317 days 

这种解决方法是慢,比我想象的本土大熊猫实施将。 叹息

2

我认为这个问题可能已经在更新版本的熊猫(也许是相关的numpy)中解决了,也许它一直是Windows特有的。然而,在我正在使用的计算机上(熊猫0.18.0,numpy 1.13,在Windows 7下),它仍然没有解决。

对于那些在相同条件下的我,有一个工作相当快于@黑点解决方法有一个:

subframe['Delta'] = subframe['Date Returned'].values - subframe['Start Date'].values 

傻,因为它看起来,把“.values”将它们转换为NumPy的datetime64对象,正确地减去它们。将其分配给熊猫数据框列,它会再次正确转换回时间戳记对象。

在我的数据框(大约90k行)上,这需要小于0.01s(全部用于在pandas中创建一个新列并将numpy转换为Timestamp),而另一个解决方法大约需要1.5s。