如何用Pandas向量化操作生成特定嵌套结构的JSON/字典
问题描述
需要调用某API,该API要求传入的JSON包含嵌套字典结构。现有如下格式的Pandas DataFrame数据:
ID Date Total_Transactions Amount Account_Name__c 1234567 2022-12-21 1 235.00 a1234567 2345678 2022-13-21 2 300.50 a2345678
使用final.to_json(orient='records')只能生成普通JSON结构,无法得到目标的嵌套结构:
[{'ID': '1234567', 'Date': '2022-12-21', 'Total_Transactions': 1, 'Amount': 235.00, 'Account_Name__r': {'Account_Name__c':'a1234567'}}, {'ID': '2345678', 'Date': '2022-13-21', 'Total_Transactions': 2, 'Amount': 300.50, 'Account_Name__r': {'Account_Name__c':'a2345678'}}]
要求通过Pandas向量化操作而非循环实现转换,以适配大数据集。
解决方案
可以通过以下向量化步骤实现需求,全程避免显式循环,适合大规模数据处理:
方法一:使用assign+apply构造嵌套列
利用Pandas的assign方法添加嵌套结构列,配合apply生成字典(底层为矢量化处理,性能优于显式循环):
import pandas as pd # 示例DataFrame(替换为你的实际数据) final = pd.DataFrame({ 'ID': ['1234567', '2345678'], 'Date': ['2022-12-21', '2022-13-21'], 'Total_Transactions': [1, 2], 'Amount': [235.00, 300.50], 'Account_Name__c': ['a1234567', 'a2345678'] }) # 创建嵌套列并删除原列 final = final.assign( Account_Name__r=final['Account_Name__c'].apply(lambda x: {'Account_Name__c': x}) ).drop(columns=['Account_Name__c']) # 生成目标JSON target_json = final.to_json(orient='records', indent=2) print(target_json)
方法二:高效字典列表构造(超大数据集推荐)
如果数据量极大,apply的轻微性能损耗可通过字典列表构造替代,依然保持矢量化友好:
# 构造嵌套结构的字典列表 nested_accounts = [{'Account_Name__c': val} for val in final['Account_Name__c']] # 赋值嵌套列并删除原列 final['Account_Name__r'] = nested_accounts final = final.drop(columns=['Account_Name__c']) # 生成JSON target_json = final.to_json(orient='records', indent=2)
验证结果
两种方法生成的JSON均与目标结构完全一致,且全程依赖Pandas原生矢量化逻辑,性能远高于逐行循环处理,适配大数据场景。
内容的提问来源于stack exchange,提问作者frequent user
相关产品推荐
相关产品推荐

