【问题标题】:How to read timestamp from excel list in python如何从python中的excel列表中读取时间戳
【发布时间】:2016-03-04 06:20:35
【问题描述】:

我对 python 很陌生,并且已经在努力完成一项简单的任务,比如从 Excel 列表中导入一系列测量的时间戳。 excel文件有一列日期和一列时间。我需要数据进行进一步计算,例如时差等。

我尝试了不同的方式来获取数据。到目前为止,我的代码如下所示:

  1. pyexcel的方法

    import pyexcel as pe
    import datetime
    import time
    from datetime import time
    import timestring
    
    for n in range(len(users)):
        sheet = pe.get_sheet(file_name=users[n],name_columns_by_row=0)
        sheet = sheet.to_array()
        data_meas = np.array(sheet)
    
        for row in range(len(data_meas)):
            print(type(row))
            input_time = data_meas[row,1]
            input_date = data_meas[row,0]
            times = [datetime.datetime.strptime(input_date, input_time, "%d %b %Y %H:%M:%S")] 
    

    最后一行出现此错误:

    TypeError: strptime() 只需要 2 个参数(给定 3 个)

  2. xlrd 方法

    import xlrd
    from datetime import time
    inputdata = xlrd.open_workbook('file.xls')
    sheet = inputdata.sheet_by_index(0)
    for row in sheet:
        input_date=sheet.cell_value(row,0)
        input_time=sheet.cell_value(row,1)
        date_values = xlrd.xldate_as_tuple(input_time, inputdata.datemode)
    time_value = time(*date_values[3:])
    

    TypeError: 'Sheet' 对象不可迭代

有人知道如何帮助我吗? 我很感激每一个提示。

【问题讨论】:

  • 第一种方法:将input_dateinput_time连接成一个字符串:strptime(input_date + " " + input_time, "%a, %d %b %Y %H:%M:%S")
  • 感谢您的快速回复。现在它说: ValueError: time data 'Date Time' does not match format '%d %b %Y %H:%M:%S' 在 excel 文件中,我将日期设为 DD/MM/YYYY,时间设为HH:MM:SS
  • 确保您传递的格式与连接的字符串匹配。 docs.python.org/2/library/…
  • 那么你的格式字符串应该是这样的:"%d/%m/%Y %H:%M:%S"
  • 我越来越接近我猜想的答案了..但仍然不对。现在:TypeError:无法将 'datetime.time' 对象隐式转换为 str

标签: python excel timestamp timedelta


【解决方案1】:

关于您的第一个解决方案,strptime 仅将一个日期字符串作为输入。 你应该加入input_dateinput_time

input_time = '18:20:00'
input_date = 'Mon, 30 Nov 2015'
time = datetime.datetime.strptime(' '.join([input_date, input_time]), "%a, %d %b %Y %H:%M:%S")

要创建datetime 对象的整个列表,您可以尝试:

times = [datetime.datetime.strptime(' '.join([data_meas[row,0], data_meas[row,1]]), "%a, %d %b %Y %H:%M:%S") for row in range(len(data_meas))]

编辑:

如果您想保留for loop,您必须将每个datetime 对象附加到您的列表中(否则您将只保留最后一个日期):

data_meas = np.array([['07/11/2015 18:20:00'],['09/11/2015 21:20:00']])

#list initilization
times = []

for row in range(len(data_meas)): 
    input_date = data_meas[row,0] 
    #we add a new item to our list
    times.append(datetime.datetime.strptime(input_date, "%d/%m/%Y %H:%M:%S"))

现在,您可以访问列表times 中的每个datetime。要计算时差,您可以查看timedelta 上的文档。

#Create a timedelta object
t1 = times[1] - times[0]
#Convert time difference in seconds
t2 = t1.total_seconds()

【讨论】:

  • 实际上我想创建一个完整的时间戳列表,以便我可以计算不同行之间的时间差。可能使它变得更加复杂的是,我有几个系列的测量,因为有很多用户。使用您的最后一个代码,我收到此错误 TypeError: sequence item 1: expected str instance, datetime.time found
  • join 可能有问题。代码在data_meas = np.array([['Mon, 30 Nov 2015','18:20:00'],['Sat, 09 Nov 2015','21:20:00']]) 上对我来说很好用,你能用你的代码的当前版本更新问题吗?
  • 此代码有效,但我无法按索引调用时间。您知道如何在需要时调用每行的时间戳来计算时间差吗?对于范围内的 n(len(users)): sheet = pe.get_sheet(file_name=users[n],name_columns_by_row=0) sheet = sheet.to_array() data_meas = np.array(sheet) 对于范围内的行(len( data_meas)-2): #input_time = data_meas[row+2,1] input_date = data_meas[row+2,0] times = [datetime.datetime.strptime(input_date, "%d/%m/%Y %H: %M:%S")] times=np.array(times) delta = times[2]-times[1]
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2018-09-03
  • 2019-01-16
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多