如何高效将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
相关产品推荐
相关产品推荐

