在多个datetime组中查找datetime实例

2024-10-02 04:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个CSV文件,带有str格式的时间戳数据。 第一个CSV_1将一个时间序列中的数据重采样为15分钟的块,如下所示:

time            ave_speed   
1/13/15 4:30    34.12318398 
1/13/15 4:45    0.83396195  
1/13/15 5:00    1.466816057

CSVè2具有来自gps点的固定时间,例如

id      time            lat         lng
513620  1/13/15 4:31    -8.15949    118.26005
513667  1/13/15 4:36    -8.15215    118.25847
513668  1/13/15 5:01    -8.15211    118.25847

我正在尝试遍历这两个文件,以查找在CSV\u2中的时间在CSV\u1中的15分钟时间组中的实例,然后执行一些操作。在这种情况下,将ave\ u speed附加到该条件为真的每个条目上。你知道吗

使用上述示例的预期结果:

id      time            lat         lng           ave_speed
513620  1/13/15 4:31    -8.15949    118.26005     0.83396195
513667  1/13/15 4:36    -8.15215    118.25847     0.83396195
513668  1/13/15 5:01    -8.15211    118.25847     something else

我试着只在熊猫数据帧中做,但遇到了一些麻烦,我想这可能是一个解决办法,以实现我所追求的。你知道吗

这是我到目前为止写的代码,我觉得它很接近,但我似乎无法确定逻辑,让我的for循环返回15分钟时间组内的条目。你知道吗

with open('path/CSV_2.csv', mode="rU") as infile:
with open('path/CSV_1.csv', mode="rU") as newinfile:
    reader = csv.reader(infile)
    nreader = csv.reader(newinfile)
    next(nreader, None)  # skip the headers
    next(reader, None)  # skip the headers

    for row in nreader:
        for dfrow in reader:
            if (datetime.datetime.strptime(dfrow[2],'%Y-%m-%d %H:%M:%S') < datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S') and
            datetime.datetime.strptime(dfrow[2],'%Y-%m-%d %H:%M:%S') > datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S') - datetime.timedelta(minutes=15)):
                print dfrow[2]

链接到我用同样的问题发布的熊猫问题Pandas, check if timestamp value exists in resampled 30 min time bin of datetimeindex

编辑: 创建两个时间列表,即listOnelistTwo包含CSV\u1中的所有时间和listTwo包含CSV\u2中的所有时间,我可以在时间组中找到实例。所以使用CSV值有点奇怪。任何帮助都将不胜感激。你知道吗


Tags: csv数据infordatetimetime时间reader
1条回答
网友
1楼 · 发布于 2024-10-02 04:34:27

如果有人对如何做同样的事情感到好奇,我觉得这很接近我想要的。它的效率不高,而且由于双循环,当前的脚本需要大约1天的时间对所有行进行多次迭代。你知道吗

如果有人有任何想法如何使这更容易或更快,我会非常感兴趣。你知道吗

#OPEN THE CSV FILES
with open('/GPS_Timepoints.csv', mode="rU") as infile:
with open('/Resampled.csv', mode="rU") as newinfile:
    reader = csv.reader(infile)
    nreader = csv.reader(newinfile)
    next(nreader, None)  # skip the headers
    next(reader, None)  # skip the headers

    #DICT COMPREHENSION TO GET ONLY THE DESIRED DATA FROM CSV              
    checkDates = {row[0] : row[7] for row in nreader }
    x = checkDates.items()

    # READ CSV INTO LIST (SEEMED TO BE EASIER THAN READING DIRECT FROM CSV FILE, I DON'T KNOW IF IT'S FASTER)
    csvDates = []
    for row in reader:
        csvDates.append(row)

    #LOOP 1 TO ITERATE OVER FULL RANGE OF DATES IN RESAMPLED DATA AND A PRINT STATEMENT TO GIVE ME HOPE THE PROGRAM IS RUNNING
    for i in range(0,len(x)):
        print 'checking', i
        #TEST TO SEE IF THE TIME IS IN THE TIME RANGE, THEN IF TRUE INSERT THE DESIRED ATTRIBUTE, IN THIS CASE SPEED TO THE ROW 
        for row in csvDates:
            if row[2] > x[i-1][0] and row[2] < x[i][0]:
                row.insert(9,x[i][1])

    # GET THE RESULT TO CSV TO UPLOAD INTO GIS
    with open('/result.csv', mode="w") as outfile:

        wr = csv.writer(outfile)
        wr.writerow(['id','boat_id','time','state','lat','lng','activity','speed', 'state_reason'])

        for row in csvDates:
            wr.writerow(row)

相关问题 更多 >

    热门问题