关于在pandas中引用父属性的技术咨询及JSON数据解析
在Pandas中处理嵌套JSON并引用父属性的实现方案
针对你提供的嵌套JSON结构(父级fInstructions包含子数组iLineItem),我来帮你搞定子项关联父属性的需求,下面是两种实用的实现方案:
方案1:使用pd.json_normalize(推荐)
这是Pandas专门为嵌套JSON设计的高效工具,能直接指定要展开的子数组,同时保留父级属性,代码简洁易维护。
代码示例
import pandas as pd # 你的原始JSON数据 data = { "fInstructions": [ { "id": 155, "type":"finstruction", "ref": "/spm/finstruction/155", "iLineItem":[ { "id": 156, "type":"ilineitem", "ref": "/spm/ilineitem/156", "creationDate": "2018-03-09", "dueDate":"2018-02-01", "effectiveDate":"2018-03-09", "frequency":"01", "coveredPeriodFrom":"2018-02-28", "coveredPeriodTo":"2018-02-28", "statusCode":"PRO", "amount": 6 }, { "id": 157, "type":"ilineitem", "ref": "/spm/ilineitem/157", "creationDate": "2018-03-09", "dueDate":"2018-02-01" # 省略其他字段 } ] } ] } # 展开子数组并保留父属性 df = pd.json_normalize( data['fInstructions'], record_path='iLineItem', # 指定要展开的子数组路径 meta=['id', 'type', 'ref'], # 要保留的父级字段 meta_prefix='parent_' # 给父级字段加前缀,避免和子项同名字段冲突 ) print(df.head())
关键参数说明
record_path: 告诉Pandas要展开哪个嵌套子数组(这里是iLineItem)meta: 列出需要从父级对象中提取的字段,比如父级的id、typemeta_prefix: 给父级字段添加前缀,避免和子项的同名字段(比如子项也有id、type)混淆
处理后的DataFrame会同时包含子项的所有字段,以及带前缀的父级属性,完美实现子项关联父数据的需求。
方案2:手动遍历嵌套结构(灵活定制)
如果需要对父属性做额外的自定义处理(比如格式转换、条件过滤),可以手动遍历嵌套结构,给每个子项添加父属性后再合并成DataFrame:
import pandas as pd data = # 同方案1的原始JSON数据 # 初始化空列表存储处理后的子项 processed_items = [] # 遍历每个父级fInstruction for finstruction in data['fInstructions']: parent_info = { 'parent_id': finstruction['id'], 'parent_ref': finstruction['ref'], 'parent_type': finstruction['type'] } # 给每个子项添加父属性 for item in finstruction['iLineItem']: item.update(parent_info) processed_items.append(item) # 转换为DataFrame df = pd.DataFrame(processed_items) print(df.head())
这种方式适合需要在关联父属性前做个性化逻辑的场景,比如只给符合特定条件的子项添加父属性,或者对父级字段做二次加工。
内容的提问来源于stack exchange,提问作者More Than Five
相关产品推荐
相关产品推荐

