Python 将嵌套JSON展平到pandas.DataFrame:基于字典值对列进行排序和命名

Python 将嵌套JSON展平到pandas.DataFrame:基于字典值对列进行排序和命名,python,json,python-3.x,pandas,nested,Python,Json,Python 3.x,Pandas,Nested,当我利用Trenton McKinney提供的关于在pandas中处理多个嵌套JSON文件的问题时,我提出了一个问题。 按照他的建议,我已经使用了这个方法来扁平化一批嵌套的json文件但是,我的JSON文件的一致性遇到了问题。 单个JSON文件大致如下所示: { "product": "example_productname", "product_id": "example_productid",

当我利用Trenton McKinney提供的关于在pandas中处理多个嵌套JSON文件的问题时,我提出了一个问题。
按照他的建议,我已经使用了这个方法来扁平化一批嵌套的json文件但是,我的JSON文件的一致性遇到了问题。

单个JSON文件大致如下所示:

{
    "product": "example_productname",
    "product_id": "example_productid",
    "product_type": "example_producttype",
    "producer": "example_producer",
    "currency": "example_currency",
    "client_id": "example_clientid",
    "supplement": [
        {
            "supplementtype": "RTZ",
            "price": 300000,
            "rebate": "500",
        },
        {
            "supplementtype": "CVB",
            "price": 500000,
            "rebate": "250",
        },
        {
            "supplementtype": "JKL",
            "price": 100000,
            "rebate": "750",
        },
    ],
}
利用引用的代码,我将得到如下数据:

产品 产品标识 产品类型 制作人 通货 客户识别码 补充0补充类型 补充价格 补充0\u回扣 附录1附录类型 补充价格 补编(1)(回扣) 等 示例\u产品名称 示例\u productid 示例\u类型 示例\u生产商 货币示例 示例\u客户ID RTZ 300000 500 CVB 500000 250 等 示例\u productname2 示例2 示例2 示例\u生产商2 示例2 示例\u客户2 CVB 500000 250 RTZ 300000 500 等
您可以在创建数据帧之前修改字典:

d = {
    "product": "example_productname",
    "product_id": "example_productid",
    "product_type": "example_producttype",
    "producer": "example_producer",
    "currency": "example_currency",
    "client_id": "example_clientid",
    "supplement": [
        {
            "supplementtype": "RTZ",
            "price": 300000,
            "rebate": "500",
        },
        {
            "supplementtype": "CVB",
            "price": 500000,
            "rebate": "250",
        },
        {
            "supplementtype": "JKL",
            "price": 100000,
            "rebate": "750",
        },
    ],
}

for s in d["supplement"]:
    d["supplementtype_{}_price".format(s["supplementtype"])] = s["price"]
    d["supplementtype_{}_rebate".format(s["supplementtype"])] = s["rebate"]

del d["supplement"]

df = pd.DataFrame([d])
print(df)
印刷品:

产品产品\u id产品\u类型生产者货币客户\u id补充类型\u RTZ\u价格补充类型\u RTZ\u返利补充类型\u CVB\u价格补充类型\u CVB\u返利补充类型\u JKL\u价格补充类型\u JKL\u返利
0示例\u产品名称示例\u产品ID示例\u产品类型示例\u生产者示例\u货币示例\u客户ID 300000 500 500000 250 100000 750

多谢你帮我整理桌子,托梅里库。介意分享一下为什么它们在预览中呈现,而不是在实际帖子中呈现吗?:)非常感谢。这是一个简单的解决办法。我稍微调整了一下,使它即使在一个“补充”专栏不存在时也能运行,并用它更新了我的问题。我想我还有很多关于字典/python数据管理的知识需要学习。