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

如何高效将Pandas DataFrame中的JSON字段转为合并后的DataFrame?

优化方案:批量处理JSON列,避免循环拼接

你的核心问题是循环中反复调用pd.concat导致的性能损耗——每次拼接都会复制已有数据,5万条记录下时间复杂度会达到O(n²),自然很慢。下面是两种更高效的实现方式,都是基于pandas的批量向量操作,能大幅提升速度:

情况1:additional_arguments中的JSON是数组(每个元素是对象)

比如每条JSON格式类似:[{"param1": "val1"}, {"param2": "val2"}]

import pandas as pd

# 1. 批量解析JSON字符串为Python列表/字典
arguments['parsed_args'] = arguments['additional_arguments'].apply(pd.json.loads)
# 2. 将每个数组拆分为单独行,保留对应的RecordID
exploded_df = arguments.explode('parsed_args')
# 3. 展开字典为列,并关联RecordID
arguments_output = pd.json_normalize(exploded_df['parsed_args']).assign(RecordID=exploded_df['RecordID'].values)

情况2:additional_arguments中的JSON是单个对象

比如每条JSON格式类似:{"param1": "val1", "param2": "val2"}

import pandas as pd

# 1. 批量解析JSON字符串为Python字典
arguments['parsed_args'] = arguments['additional_arguments'].apply(pd.json.loads)
# 2. 直接展开字典为列,并关联RecordID
arguments_output = pd.json_normalize(arguments['parsed_args']).assign(RecordID=arguments['RecordID'].values)

额外优化:如果JSON解析速度慢

如果apply(pd.json.loads)还是偏慢,可以用json模块的批量解析,比如:

import json

arguments['parsed_args'] = arguments['additional_arguments'].map(json.loads)

map在处理简单函数时比apply略快。

为什么比原方法快?

  • 原循环是逐行处理+反复拼接,每次拼接都会复制整个已有结果集;
  • 优化后的方法是批量解析+一次性展开/拼接,利用pandas内部的C级优化,避免了重复复制数据,时间复杂度降到O(n)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:45