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

如何高效将JSON对象转换为DataFrame?求优化方案

优化JSON转DataFrame的实现方案

需求

从input_df每行生成的JSON字符串(含suggestions数组,每个元素有suggestion/reason字段),转换为包含suggestion1、reason1至suggestion3、reason3列的DataFrame,现有代码可行但需更高效简洁的实现。

优化后的代码实现

import json
import pandas as pd

# 1. 封装JSON解析逻辑
def parse_suggestion_json(raw_str):
    # 清理JSON字符串中的多余标记(反引号、json标识、换行)
    cleaned = raw_str.replace('`', '').replace('json', '').replace('\n', '')
    # 解析并提取suggestions数组
    return json.loads(cleaned)['suggestions']

# 2. 矢量化处理input_df的description列
# 用apply替代手动循环,利用pandas内部优化
suggestions_list = input_df['description'].apply(
    lambda desc: parse_suggestion_json(return_json_object(fr"""sample text ... {desc}?"""))
).tolist()

# 3. 扁平化数据并生成目标DataFrame
flat_rows = []
for suggestions in suggestions_list:
    row_dict = {}
    for idx, item in enumerate(suggestions, start=1):
        row_dict[f'suggestion{idx}'] = item['suggestion']
        row_dict[f'reason{idx}'] = item['reason']
    flat_rows.append(row_dict)

suggestion_df = pd.DataFrame(flat_rows)

进一步简化的扁平化写法(字典推导式)

如果喜欢更紧凑的代码,可以用字典推导式替代内层循环:

flat_rows = [
    {
        **{f'suggestion{i+1}': s['suggestion'] for i, s in enumerate(suggestions)},
        **{f'reason{i+1}': s['reason'] for i, s in enumerate(suggestions)}
    }
    for suggestions in suggestions_list
]
suggestion_df = pd.DataFrame(flat_rows)

核心优化点

  • 减少手动循环:用pandas.Series.apply替代for i in range(len(input_df)),利用pandas的矢量化操作提升效率,尤其在数据量大时更明显
  • 代码模块化:将JSON解析逻辑封装为独立函数,提升可读性和可维护性
  • 简化字符串处理:合并多次字符串替换操作,减少中间变量
  • 可选批量优化:如果return_json_object支持批量请求,可以一次性传入所有description,减少API调用次数(需根据该函数的实际实现调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:47:36