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

匹配或近似匹配CSV时间列,提取符合条件的指定列数据

CSV文件匹配与Error_3列提取实现方案

需求说明

我们需要基于以下规则,从CSV B中提取Error_3列的值补充到CSV A中:

  • 精确匹配优先:当CSV A某行的Date/Time与CSV B中某行的Date/Time完全一致时,筛选CSV B中Error_2与CSV A该行相同的记录,提取其Error_3值
  • 近似匹配兜底:若没有精确匹配的记录,选择CSV B中与CSV A该行时间差最小(通常1-2秒内)的记录,提取其Error_3值

示例数据

CSV A(原始数据)

Timestamp,Date/Time,Error_1,Error_2
170:02:46:928,2023/01/01 16:45:11,APP_ERR,Loss_of_Data
170:28:37:328,2023/01/01 17:11:04,APP_ERR,SB_Data_Expiration

CSV B(数据源)

Timestamp,Date/Time,Error_1,Error_2,Error_3
170:02:46:928,2023/01/01 16:45:07,APP_ERR,Loss_of_Data,NO_ERROR
170:14:40:928,2023/01/01 16:45:10,APP_ERR,Loss_of_Data,Loss_of_Data
170:28:16:928,2023/01/01 17:10:44,APP_ERR,Cnx_Attempt,NO_ERROR
170:28:37:328,2023/01/01 17:11:04,APP_ERR,SB_Data_Expiration,ERROR
170:29:57:728,2023/01/01 17:11:04,APP_ERR,PEB_due_to_overlimit,Due_to_Over_SBI
170:32:59:978,2023/01/01 17:11:04,APP_ERR,Cnx_Attempt,NO_ERROR
170:33:40:778,2023/01/01 17:16:08,APP_ERR,Cnx_Attempt,NO_ERROR

预期输出

Timestamp,Date/Time,Error_1,Error_2,Error_3
170:02:46:928,2023/01/01 16:45:11,APP_ERR,Loss_of_Data,Loss_of_Data
170:28:37:328,2023/01/01 17:11:04,APP_ERR,SB_Data_Expiration,ERROR

代码实现(Python + Pandas)

用Pandas处理时间转换和匹配逻辑,代码如下:

import pandas as pd

# 读取CSV文件
df_a = pd.read_csv('csv_a.csv')
df_b = pd.read_csv('csv_b.csv')

# 将Date/Time列转换为datetime类型,方便时间计算
df_a['datetime'] = pd.to_datetime(df_a['Date/Time'], format='%Y/%m/%d %H:%M:%S')
df_b['datetime'] = pd.to_datetime(df_b['Date/Time'], format='%Y/%m/%d %H:%M:%S')

def get_error_3(row):
    # 第一步:尝试精确匹配(时间+Error_2)
    exact_match = df_b[(df_b['datetime'] == row['datetime']) & (df_b['Error_2'] == row['Error_2'])]
    if not exact_match.empty:
        return exact_match.iloc[0]['Error_3']
    
    # 第二步:无精确匹配时,找时间差最小的记录
    df_b['time_diff'] = abs(df_b['datetime'] - row['datetime'])
    closest_row = df_b.loc[df_b['time_diff'].idxmin()]
    return closest_row['Error_3']

# 为CSV A添加Error_3列
df_a['Error_3'] = df_a.apply(get_error_3, axis=1)

# 移除临时的datetime列,保留原始结构
result = df_a.drop(columns=['datetime'])

# 输出结果到CSV
result.to_csv('result.csv', index=False)
print(result)

代码说明

  1. 时间格式转换:将Date/Time转为datetime类型,支持时间差计算和精确匹配
  2. 精确匹配逻辑:同时匹配时间和Error_2字段,确保提取对应记录的Error_3
  3. 近似匹配逻辑:计算CSV B所有记录与当前行的时间差,取最小差值对应的记录的Error_3
  4. 结果输出:移除临时列后,将结果保存为新的CSV文件,同时打印控制台预览

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:42:16