2017-06-16 32 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。