pandas数据库 - 如何解决天数差异

时间:2016-10-05 17:24:16

标签: python pandas time-series

我有一个pandas数据帧navTable,其索引是一系列日期。

我需要找到索引

中连续日期之间的差异
                 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

Outright,这不被接受,因为它抱怨“天不能应用于系列赛”

所以,我试过这个:

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'对象没有属性'days'

问题1)我是否有效地处理了这种情况? 问题2)如何解决

  

'NaTType'对象没有属性'days'

对于记录,第一个元素是pandas.tslib.NaTType类型 其余类型为pandas.tslib.Timedelta

修改:格式化

1 个答案:

答案 0 :(得分: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