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

高效跟踪数据修订:DataFrame快速处理API数据修订方案问询

高效跟踪API数据修订的实现方案

核心思路

用Pandas的向量化操作替代逐行遍历,通过分组、合并等方法快速对比新数据与历史数据的差异,自动生成修订版本号,彻底避开低效循环。

具体步骤

  1. 数据预处理
    把API返回的datetime,value格式数据转成DataFrame,同时将datetime转为时间类型、value转为数值类型,避免字符串匹配带来的性能损耗:

    import pandas as pd
    
    # 假设api_data是从API获取的原始数据(列表/文本)
    new_df = pd.DataFrame(api_data, columns=["datetime", "value"])
    new_df["datetime"] = pd.to_datetime(new_df["datetime"])
    new_df["value"] = pd.to_numeric(new_df["value"])
    
  2. 加载历史数据
    读取本地保存的历史DataFrame,首次运行则初始化空表:

    try:
        history_df = pd.read_csv("history_data.csv", parse_dates=["datetime"])
    except FileNotFoundError:
        history_df = pd.DataFrame(columns=["datetime", "value", "revision"])
    
  3. 快速识别新增与修订数据
    先提取历史数据中每个datetime的最新版本(最大revision)及对应value:

    # 按datetime分组,取每组最新的记录(最大revision对应的行)
    latest_history = history_df.groupby("datetime").agg(
        latest_value=("value", "last"),
        max_revision=("revision", "max")
    ).reset_index()
    

    将新数据与最新历史数据合并,筛选出需要新增的行:

    # 左连接新数据和最新历史数据
    merged = new_df.merge(latest_history, on="datetime", how="left")
    
    # 筛选条件:要么是从未出现过的datetime,要么是value发生变化的旧datetime
    to_add = merged[(merged["latest_value"].isna()) | (merged["value"] != merged["latest_value"])]
    
  4. 生成修订版本号并合并数据
    为需要新增的行计算revision:新datetime的revision为0,修订的datetime为当前最大revision+1(空值则填0):

    to_add["revision"] = to_add["max_revision"].fillna(-1) + 1
    # 保留目标列
    to_add = to_add[["datetime", "value", "revision"]]
    

    把新增行合并到历史DataFrame:

    updated_history = pd.concat([history_df, to_add], ignore_index=True)
    
  5. 保存更新后的历史数据

    updated_history.to_csv("history_data.csv", index=False)
    

效果验证

按照上述方法处理后,针对2023-09-12 08:00的三次数据(1000、2000、1000),最终生成的DataFrame会自动生成对应的revision 0、1、2,完全符合需求,且所有操作都是Pandas向量化处理,性能远高于逐行遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:49:57