【问题标题】:pandas dataseries - How to address difference in days熊猫数据系列 - 如何解决天数差异
【发布时间】:2016-10-05 17:24:15
【问题描述】:

我有一个 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

直接,这没有被接受,因为它抱怨“无法在系列上应用天数”

所以,我尝试了这个:

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

编辑:格式化

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    通常您将使用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
    

    【讨论】:

      猜你喜欢
      • 2022-10-02
      • 2021-11-10
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多