You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现列表元素仅遍历一次?解决CSV时间戳匹配重复写入问题

问题:CSV数据集按Timestamp匹配时避免重复条目

需求说明

我需要对比两个CSV数据集,首行均为标题行,其余行对应特定时间的数值,其中Timestamp的索引为1。目标是将两个数据集中Timestamp偏差在0.1以内的匹配行写入新的Excel文件Comparison.xlsx。

数据集示例

cam_data_file.csv

Time,Timestamp,blood_pressure_diastolic_value,blood_pressure_systolic_value,heart_rate_value,respiratory_rate_value,sat02_value
07-02-2023 15:01:35.053361,1675778495.053361,69,138,51,80,100
07-02-2023 15:01:36.074203,1675778496.074203,69,138,51,80,100
...

icu_data_file.csv

SystemLocalTime,Timestamp,NOM_PRESS_BLD_NONINV_DIA,NOM_PRESS_BLD_NONINV_SYS,NOM_ECG_CARD_BEAT_RATE,NOM_RESP_RATE,NOM_PULS_OXIM_SAT_O2
07-02-2023 15:01:36.027,1675778496.027,69,138,53,20,100
07-02-2023 15:01:37.045,1675778497.045,69,138,53,20,100
...

初始实现及问题

我最初以只读模式打开两个文件,遍历所有行计算Timestamp差值,符合条件则写入Excel,但出现了一个cam_data条目匹配多个icu_data条目,导致输出文件中重复出现cam_data值的问题。

初始代码:

import csv
import xlsxwriter

with open('cam_data_file.csv', 'r') as file1:         
    cam_reader = csv.reader(file1, delimiter=',')     
    kopfzeile1 = next(cam_reader)                     
    cam_daten = list(cam_reader)       

with open('icu_data_file.csv', 'r') as file2:        
    icu_reader = csv.reader(file2, delimiter=',')     
    kopfzeile2 = next(icu_reader)                     
    icu_daten = list(icu_reader) 
      
workbook = xlsxwriter.Workbook('Comparison.xlsx')          
worksheet = workbook.add_worksheet('Values')                          

index = 1                                     
for a in cam_daten:                                     
    for b in icu_daten:                                 
        dif = (float(a[1]) - float(b[1]))     
        if abs(dif) < 0.1:
            worksheet.write(index, 0, index)
            worksheet.write(index, 2, a[0]) 
            worksheet.write(index, 4, a[2])
            # 省略其他字段的写入逻辑

解决方法

通过给每个cam_data条目添加used标记,找到第一个匹配的icu_data条目后立即跳出内层循环,确保每个cam_data只被写入一次。

修正后的代码:

for a in cam_daten:                            
    used = False                               
    for b in icu_daten:                        
        dif = (float(a[1]) - float(b[1]))       
        if abs(dif) < 0.1:                     
            used = True                        
            worksheet.write(index, 0, index)
            worksheet.write(index, 2, a[0])           
            worksheet.write(index, 4, a[2])           
            # 省略其他字段的写入逻辑
            index += 1                     
        if used:                           
            break
workbook.close()                          

内容的提问来源于stack exchange,提问作者WonderWoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:50:38