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

在Pandas中比对JSON字符串并按匹配结果打API变更标签

Pandas DataFrame API兼容性标记实现方案

先来理清楚核心逻辑:按照优先级判断——先看diff2是不是空值,再检查diff2里的所有API关键词是否都能在diff里找到,最后判断是否存在匹配但diff还有额外内容的情况。

具体实现步骤

1. 数据预处理

  • 解析diff列的JSON:如果diff存的是JSON字符串,先转成Python可遍历的对象(字典/列表),之后转成字符串方便关键词匹配;要是已经是Python对象,直接转字符串就行。
  • 提取diff2中的API关键词:因为diff2都是以API开头的文本,用正则提取所有API相关标识,比如API_xxx、API-xxx这类,正则可以根据实际文本格式调整。

2. 编写标记函数

写一个自定义函数,逐行处理DataFrame的数据:

import pandas as pd
import json
import re

def mark_compatibility(row):
    # 规则1:diff2为空值,直接标记为Non-Breaking
    if pd.isna(row['diff2']):
        return 'Non-Breaking'
    
    # 解析diff的JSON数据(如果是字符串格式的话)
    try:
        diff_data = json.loads(row['diff']) if isinstance(row['diff'], str) else row['diff']
        diff_str = json.dumps(diff_data)
    except json.JSONDecodeError:
        # 万一JSON解析失败,默认按非破坏性变更处理,可按需调整
        return 'Non-Breaking'
    
    # 从diff2中提取API关键词,正则可根据实际API格式修改
    api_keywords = re.findall(r'API[\w-]+', row['diff2'])
    if not api_keywords:
        # 没提取到关键词,按Non-Breaking处理
        return 'Non-Breaking'
    
    # 检查diff2的所有关键词是否都在diff里
    all_matched = all(keyword in diff_str for keyword in api_keywords)
    # 提取diff里的所有API关键词,对比是否有diff2没覆盖的内容
    diff_api_keywords = re.findall(r'API[\w-]+', diff_str)
    extra_in_diff = set(diff_api_keywords) - set(api_keywords)
    
    if all_matched and not extra_in_diff:
        # 规则2:所有关键词都匹配,且diff没有额外API变更,标记Breaking
        return 'Breaking'
    elif all_matched and extra_in_diff:
        # 规则3:关键词都匹配,但diff还有额外内容,标记Both
        return 'Both'
    else:
        # 有diff2的关键词不在diff里,按Non-Breaking处理,可按需调整
        return 'Non-Breaking'

3. 应用函数到DataFrame

把上面的函数作用到DataFrame的每一行,生成新的标记列:

# 假设你的DataFrame名为df
df['compatibility_mark'] = df.apply(mark_compatibility, axis=1)

注意事项

  • JSON解析适配:如果diff列本来就是Python字典/列表,直接跳过json.loads步骤,转成字符串就行。
  • 正则规则调整:如果你的API命名格式特殊(比如带点号、下划线之外的符号),要修改正则表达式,确保能准确提取关键词。
  • 精确匹配优化:如果需要更严谨的对比,不要只靠字符串匹配,可以解析diff的JSON结构,逐个核对变更项和diff2的关键词,这样结果更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:47:29