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

如何在Python中对含JSON格式文本的行进行分组分类

解决方案:将JSON文本列统一分类标记到单列

核心思路

直接匹配完整JSON字符串的方式扩展性差,建议优先解析JSON提取关键特征来定义分类规则,或者用np.select整合原有的匹配逻辑,生成统一的分类标记列。


方案1:解析JSON提取特征分类(推荐)

先把JSON文本转成可操作的字典,通过关键字段特征区分类别,灵活性更强:

import pandas as pd
import json
import numpy as np

# 读取数据
df = pd.read_excel('./sourcefile - 2023-03-10T161929.976.xlsx')

# 解析JSON列,处理解析失败的情况
def parse_json(text):
    try:
        return json.loads(text)
    except:
        return {}

df['parsed_json'] = df['Textcolumn_name'].apply(parse_json)

# 定义分类条件与对应标记
conditions = [
    # 匹配示例1:61号Classifier含特定字符串,且65号Classifier含指定前缀
    (df['parsed_json'].apply(lambda x: 'roas!pconv!PA!0601-0628!remove_fea' in x.get('61', {}).get('ClassifierName', '')) &
     df['parsed_json'].apply(lambda x: x.get('65', {}).get('ClassifierName', '').startswith('CP!en-us!Cascade'))),
    # 匹配示例2:61号Classifier含特定字符串,且65号Classifier为指定值
    (df['parsed_json'].apply(lambda x: 'roas_pconv!PA!NN!4weektill20200928' in x.get('61', {}).get('ClassifierName', '')) &
     df['parsed_json'].apply(lambda x: x.get('65', {}).get('ClassifierName', '') == 'ROASScorePrediction.ini'))
    # 可继续添加其他6-8种分类条件
]

labels = ['1/A', '2/B']  # 对应条件的分类标记

# 生成分类列
df['Cat'] = np.select(conditions, labels, default='其他')

方案2:直接匹配完整字符串生成分类列

如果JSON格式完全固定,可直接整合原有的匹配逻辑,避免多mask列:

import pandas as pd
import numpy as np

df = pd.read_excel('./sourcefile - 2023-03-10T161929.976.xlsx')

# 定义每个类别对应的匹配字符串与标记
match_list = [
    # 示例1的完整JSON字符串
    '{"23":{"ClassifierName":"CP!nativeads!PA!pconv!0604-0701.ini","CountModelIds":"1190"},"61":{"ClassifierName":"CP!nativeads!roas!pconv!PA!0601-0628!remove_fea.ini","CountModelIds":"1185;1186"},"63":{"ClassifierName":"CP!nativeads!roas!gv!v2!PA!NN!0601-0628.ini","CountModelIds":"1187;1188;1189"},"65":{"ClassifierName":"CP!en-us!Cascade!PA!ROAS_ScorePrediction0628Update.ini"}}',
    # 示例2的完整JSON字符串
    '{"23":{"ClassifierName":"CP!nativeads!PA!pconv!0604-0701.ini","CountModelIds":"1190"},"61":{"ClassifierName":"CP!nativeads!roas_pconv!v2!PA!NN!OfferSelectionMask!roasonly4weektill20210707.ini","CountModelIds":"1185;1186"},"63":{"ClassifierName":"CP!nativeads!roas_gv!v2!PA!NN!withTA4weeksTill20210707.ini","CountModelIds":"1187;1188;1189"},"65":{"ClassifierName":"ROASScorePrediction.ini"}}'
]

labels = ['1/A', '2/B']

# 生成条件列表
conditions = [df['Textcolumn_name'].str.contains(s, case=False, na=False) for s in match_list]

# 生成统一分类列
df['Cat'] = np.select(conditions, labels, default='其他')

说明

  • 方案1适合JSON结构固定但字段内容有规律变化的场景,后续新增类别只需调整特征匹配规则,无需复制冗长字符串;
  • 方案2适合JSON内容完全固定的场景,逻辑简单但扩展性弱;
  • 可根据实际需求扩展conditions和labels列表,覆盖6-8种分类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:45:00