【问题标题】:Time delta for each element between two elements in a list列表中两个元素之间每个元素的时间增量
【发布时间】:2021-03-25 13:31:33
【问题描述】:

我正在尝试获取列表中每两个日期时间元素之间的增量时间。但是每次我尝试某些东西时,都会出现索引错误或值不正确。 在某些情况下,我面临着负值。鉴于没有负时间,这是不可能的。

例如:time_delta_list = [-2, 0, 8, 6]

我应该如何在 for 循环中执行此操作?

代码:

assignment_date = [['US01', datetime.datetime(2020, 10, 20, 6, 59)], ['US03', datetime.datetime(2020, 10, 28, 9, 8)], ['US02', datetime.datetime(2020, 10, 29, 8, 54)], ['US05', datetime.datetime(2020, 10, 29, 15, 5)], ['US09', datetime.datetime(2020, 11, 2, 7, 57)], ['US10', datetime.datetime(2020, 11, 2, 7, 57)], ['US11', datetime.datetime(2020, 11, 2, 7, 58)], ['US04', datetime.datetime(2020, 11, 2, 7, 59)]]
time_delta_list = []
 

for index, elem in enumerate(assignment_date):     
        
            if index == 0:
                time_delta = elem[1] - datetime(day=7, month=9, year=2020, hour=10, minute=30)
                time_delta_list.append(time_delta)
                
            if index + 1 < len(assignment_date):
                current_date = elem[1]
                next_date = assignment_date[index+1][1]
                
                time_delta = next_date - current_date
                time_delta_list.append(time_delta)


-----------------------------------------------------------------------------
              
Traceback (most recent call last):
  File "delta_time_assignments.py", line 147, in <module>
    next_date = fed_lists[index+1][1]
IndexError: list index out of range

【问题讨论】:

    标签: python list datetime for-loop timedelta


    【解决方案1】:

    使用 pandas 相当容易,无需弄乱索引

    import datetime
    import pandas
    
    assignment_date = [['US01', datetime.datetime(2020, 10, 20, 6, 59)], ['US03', datetime.datetime(2020, 10, 28, 9, 8)], ['US02', datetime.datetime(2020, 10, 29, 8, 54)], ['US05', datetime.datetime(2020, 10, 29, 15, 5)], ['US09', datetime.datetime(2020, 11, 2, 7, 57)], ['US10', datetime.datetime(2020, 11, 2, 7, 57)], ['US11', datetime.datetime(2020, 11, 2, 7, 58)], ['US04', datetime.datetime(2020, 11, 2, 7, 59)]]
    
    df = pandas.DataFrame(assignment_date)
    df = df.rename(columns={0:'key', 1:'initial_date'})
    initial_date = datetime.datetime(day=7, month=9, year=2020, hour=10, minute=30)
    
    df['shift'] = df['initial_date'].shift(1, fill_value=initial_date)
    df['delta'] = df['initial_date'] - df['shift']
    
    print(df)
    
    

    【讨论】:

    • 这是我得到的错误(我当然安装了 pandas):回溯(最后一次调用):文件“Eindopdracht_2_python.py”,第 166 行,在 df['shift'] = df2['initial_date'].shift(1, fill_value=initial_date) NameError: name 'df2' is not defined
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多