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

关于在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、type
  • meta_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:05:35