如何实现列表元素仅遍历一次?解决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
相关产品推荐
相关产品推荐

