2016-10-05 29 views
3

我有一個熊貓dataframe navTable的索引是一系列日期。pandas dataseries - 如何解決天差

我需要找到在指數

    Delta 
2016-08-10  0.006619 
2016-08-12  0.006595 
2016-08-14  0.006595 
2016-08-17  0.006595 
2016-08-18  0.006595 

我希望有一個新的列Days_Diff這將讓我在以後的日期差(指數)連續日期之間的差值。因此我的輸出應該是這樣的

   Delta  Delta_Days 
8/10/2016 0.006619 None 
8/12/2016 0.006595 2 
8/14/2016 0.006595 2 
8/17/2016 0.006595 3 
8/18/2016 0.006595 1 

我想這第一:

navTable['Index'] = navTable.index 
navTable['Days_Diff'] = navTable['Index'] - navTable['Index'].shift(1) 
navTable['Delta_Days'] = navTable['Days_Diff'].days 

奪標,因爲它是抱怨「天不能系列應用」

因此,這是不能接受的,我試過這個:

navTable['Index'] = navTable.index 
navTable['Days_Diff'] = navTable['Index'] - navTable['Index'].shift(1) 
navTable['Delta_Days'] = [ eachDayDiff.days for eachDayDiff in list(dataTable['Days_Diff']) ] 

可以理解,它抱怨第一個元素是Null

'NaTType' 對象沒有屬性 '天'

問題1)我是不是有效地處理這種情況? 問題2)如何我解決

'NaTType' 對象有沒有屬性 '天'

對於記錄,第一個元素是類型的pandas.tslib.NaTType 其餘均爲類型的pandas.tslib.Timedelta

編輯:格式化

回答

2

通常情況下,您將使用diff()函數來計算相鄰的差異,您可以將索引轉換爲一個正常的系列,然後使用diff()函數給出了一系列time delta數據類型的:

df.index.to_series().diff() 

# 2016-08-10  NaT 
# 2016-08-12 2 days 
# 2016-08-14 2 days 
# 2016-08-17 3 days 
# 2016-08-18 1 days 
# dtype: timedelta64[ns] 

向該時間增量數據類型轉換爲數值類型:

import numpy as np 
df['Delta_Days'] = (df.index.to_series().diff()/np.timedelta64(1, 'D')).astype(float) 

df 

#    Delta Delta_Days 
#2016-08-10 0.006619   NaN 
#2016-08-12 0.006595   2.0 
#2016-08-14 0.006595   2.0 
#2016-08-17 0.006595   3.0 
#2016-08-18 0.006595   1.0