【问题标题】:calculate time difference pandas dataframe计算时间差熊猫数据框
【发布时间】:2013-06-23 22:26:26
【问题描述】:

我有一个熊猫数据框,其中索引如下:

Index([16/May/2013:23:56:43, 16/May/2013:23:56:42, 16/May/2013:23:56:43, ..., 17/May/2013:23:54:45, 17/May/2013:23:54:45, 17/May/2013:23:54:45], dtype=object)

我用下面的方法计算了随后发生的时间差。

df2['tvalue'] = df2.index
df2['tvalue'] = np.datetime64(df2['tvalue'])
df2['delta'] = (df2['tvalue']-df2['tvalue'].shift()).fillna(0)

所以我得到了以下输出

    Time                      tvalue delta                                          
16/May/2013:23:56:43   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:42   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:43   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:43   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:48   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:48   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:56:48   2013-05-01 13:23:56 00:00:00  
16/May/2013:23:57:44   2013-05-01 13:23:57 00:00:01  
16/May/2013:23:57:44   2013-05-01 13:23:57 00:00:00  
16/May/2013:23:57:44   2013-05-01 13:23:57 00:00:00  

但是它以年为小时计算了时差,日期也不同?这可能是什么问题?

【问题讨论】:

    标签: python datetime time pandas


    【解决方案1】:

    解析您的日期并非易事,我认为 strptime 可以做到这一点,但对我不起作用。您在时间上方的示例只是字符串,而不是日期时间。

    In [140]: from dateutil import parser
    
    In [130]: def parse(x):
       .....:     date, hh, mm, ss = x.split(':')
       .....:     dd, mo, yyyy = date.split('/')
       .....:     return parser.parse("%s %s %s %s:%s:%s" % (yyyy,mo,dd,hh,mm,ss))
       .....: 
    
    In [131]: map(parse,idx)
    Out[131]: 
    [datetime.datetime(2013, 5, 16, 23, 56, 43),
     datetime.datetime(2013, 5, 16, 23, 56, 42),
     datetime.datetime(2013, 5, 16, 23, 56, 43),
     datetime.datetime(2013, 5, 17, 23, 54, 45),
     datetime.datetime(2013, 5, 17, 23, 54, 45),
     datetime.datetime(2013, 5, 17, 23, 54, 45)]
    
    In [132]: pd.to_datetime(map(parse,idx))
    Out[132]: 
    <class 'pandas.tseries.index.DatetimeIndex'>
    [2013-05-16 23:56:43, ..., 2013-05-17 23:54:45]
    Length: 6, Freq: None, Timezone: None
    
    In [133]: df = DataFrame(dict(time = pd.to_datetime(map(parse,idx))))
    
    In [134]: df
    Out[134]: 
                     time
    0 2013-05-16 23:56:43
    1 2013-05-16 23:56:42
    2 2013-05-16 23:56:43
    3 2013-05-17 23:54:45
    4 2013-05-17 23:54:45
    5 2013-05-17 23:54:45
    
    In [138]: df['delta'] = (df['time']-df['time'].shift()).fillna(0)
    
    In [139]: df
    Out[139]: 
                     time     delta
    0 2013-05-16 23:56:43  00:00:00
    1 2013-05-16 23:56:42 -00:00:01
    2 2013-05-16 23:56:43  00:00:01
    3 2013-05-17 23:54:45  23:58:02
    4 2013-05-17 23:54:45  00:00:00
    5 2013-05-17 23:54:45  00:00:00
    

    【讨论】:

    • 也可以使用df.diff() 代替df['time'] - df['time'].shift()。干净一点。
    • @Jeff:工作完美! :) 但是处理代码需要时间!
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2016-01-20
    • 2021-02-06
    相关资源
    最近更新 更多