json 规范化 record_path 键未找到

问题描述 投票:0回答:1

我想知道为什么当我在此数据集上使用 record_path 时会出现关键错误。 它来自 FDA api,我抓取了前两个结果。

data = {
      "meta": {
        "disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
        "terms": "https://open.fda.gov/terms/",
        "license": "https://open.fda.gov/license/",
        "last_updated": "2024-11-15",
        "results": {
          "skip": 0,
          "limit": 2,
          "total": 118943
        }
      },
      "results": [
        {
          "product_ndc": "73647-062",
          "generic_name": "MENTHOL, CAMPHOR",
          "labeler_name": "Just Brands LLC",
          "brand_name": "JUST CBD - CBD AND THC ULTRA RELIEF",
          "active_ingredients": [
            {
              "name": "CAMPHOR (SYNTHETIC)",
              "strength": "2 g/100g"
            },
            {
              "name": "MENTHOL",
              "strength": "6 g/100g"
            }
          ],
          "finished": true,
          "packaging": [
            {
              "package_ndc": "73647-062-04",
              "description": "113 g in 1 BOTTLE, PUMP (73647-062-04)",
              "marketing_start_date": "20230314",
              "sample": false
            }
          ],
          "listing_expiration_date": "20251231",
          "openfda": {
            "manufacturer_name": [
              "Just Brands LLC"
            ],
            "spl_set_id": [
              "f664eb79-8897-3a49-e053-2995a90a37b4"
            ],
            "is_original_packager": [
              true
            ],
            "unii": [
              "5TJD82A1ET",
              "L7T10EIP3A"
            ]
          },
          "marketing_category": "OTC MONOGRAPH DRUG",
          "dosage_form": "GEL",
          "spl_id": "16c906dd-6989-9a79-e063-6394a90afa71",
          "product_type": "HUMAN OTC DRUG",
          "route": [
            "TOPICAL"
          ],
          "marketing_start_date": "20230314",
          "product_id": "73647-062_16c906dd-6989-9a79-e063-6394a90afa71",
          "application_number": "M017",
          "brand_name_base": "JUST CBD - CBD AND THC ULTRA RELIEF"
        },
        {
          "product_ndc": "0591-4039",
          "marketing_end_date": "20250930",
          "generic_name": "CLOBETASOL PROPIONATE",
          "labeler_name": "Actavis Pharma, Inc.",
          "brand_name": "CLOBETASOL PROPIONATE",
          "active_ingredients": [
            {
              "name": "CLOBETASOL PROPIONATE",
              "strength": ".05 g/mL"
            }
          ],
          "finished": true,
          "packaging": [
            {
              "package_ndc": "0591-4039-46",
              "description": "1 BOTTLE in 1 CARTON (0591-4039-46)  / 59 mL in 1 BOTTLE",
              "marketing_start_date": "20150828",
              "marketing_end_date": "20250930",
              "sample": false
            },
            {
              "package_ndc": "0591-4039-74",
              "description": "1 BOTTLE in 1 CARTON (0591-4039-74)  / 125 mL in 1 BOTTLE",
              "marketing_start_date": "20150828",
              "marketing_end_date": "20250930",
              "sample": false
            }
          ],
          "openfda": {
            "manufacturer_name": [
              "Actavis Pharma, Inc."
            ],
            "rxcui": [
              "861512"
            ],
            "spl_set_id": [
              "907e425a-720a-4180-b97c-9e25008a3658"
            ],
            "is_original_packager": [
              true
            ],
            "unii": [
              "779619577M"
            ]
          },
          "marketing_category": "NDA AUTHORIZED GENERIC",
          "dosage_form": "SPRAY",
          "spl_id": "33a56b8b-a9a6-4287-bbf4-d68ad0c59e07",
          "product_type": "HUMAN PRESCRIPTION DRUG",
          "route": [
            "TOPICAL"
          ],
          "marketing_start_date": "20150828",
          "product_id": "0591-4039_33a56b8b-a9a6-4287-bbf4-d68ad0c59e07",
          "application_number": "NDA021835",
          "brand_name_base": "CLOBETASOL PROPIONATE",
          "pharm_class": [
            "Corticosteroid Hormone Receptor Agonists [MoA]",
            "Corticosteroid [EPC]"
          ]
        }
      ]
    }

在 results 键下有 2 个嵌套键,分别名为“active_ingredients”和“packaging” 当我正常化时我得到

result = pd.json_normalize(data['results'], record_path=["packaging"],meta=['product_ndc'])

预期的列

package_ndc description marketing_start_date    sample  marketing_end_date  product_ndcs 

但是当我将 active_ingredients 添加到 record_path 列表中时,我收到一个关键错误。 对于元来说也是如此。 当我将“brand_name”和“generic_name”等其他列添加到元列表时,我收到一个关键错误。 查看钥匙

这不起作用

result = pd.json_normalize(data['results'], record_path=["packaging","active_ingredients"],meta=['product_ndc','brand_name','generic_name'])

感谢您的帮助

python json pandas
1个回答
0
投票

当您指定多个 record_path 条目(如

"packaging"
"active_ingredients"
)时,pandas 预计第二个
record_path
(
"active_ingredients"
) 存在于第一个 record_path (
"packaging"
) 的每个元素中,但是,在您的数据中,
active_ingredients
不是包装的嵌套属性

这样做可以解决这个问题

import pandas as pd

data = {
    "meta": {
        "disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
        "terms": "https://open.fda.gov/terms/",
        "license": "https://open.fda.gov/license/",
        "last_updated": "2024-11-15",
        "results": {
            "skip": 0,
            "limit": 2,
            "total": 118943
        }
    },
    "results": [
        {
            "product_ndc": "73647-062",
            "generic_name": "MENTHOL, CAMPHOR",
            "labeler_name": "Just Brands LLC",
            "brand_name": "JUST CBD - CBD AND THC ULTRA RELIEF",
            "active_ingredients": [
                {
                    "name": "CAMPHOR (SYNTHETIC)",
                    "strength": "2 g/100g"
                },
                {
                    "name": "MENTHOL",
                    "strength": "6 g/100g"
                }
            ],
            "finished": True,
            "packaging": [
                {
                    "package_ndc": "73647-062-04",
                    "description": "113 g in 1 BOTTLE, PUMP (73647-062-04)",
                    "marketing_start_date": "20230314",
                    "sample": False
                }
            ],
            "listing_expiration_date": "20251231",
            "openfda": {
                "manufacturer_name": ["Just Brands LLC"],
                "spl_set_id": ["f664eb79-8897-3a49-e053-2995a90a37b4"],
                "is_original_packager": [True],
                "unii": ["5TJD82A1ET", "L7T10EIP3A"]
            },
            "marketing_category": "OTC MONOGRAPH DRUG",
            "dosage_form": "GEL",
            "spl_id": "16c906dd-6989-9a79-e063-6394a90afa71",
            "product_type": "HUMAN OTC DRUG",
            "route": ["TOPICAL"],
            "marketing_start_date": "20230314",
            "product_id": "73647-062_16c906dd-6989-9a79-e063-6394a90afa71",
            "application_number": "M017",
            "brand_name_base": "JUST CBD - CBD AND THC ULTRA RELIEF"
        },
        {
            "product_ndc": "0591-4039",
            "marketing_end_date": "20250930",
            "generic_name": "CLOBETASOL PROPIONATE",
            "labeler_name": "Actavis Pharma, Inc.",
            "brand_name": "CLOBETASOL PROPIONATE",
            "active_ingredients": [
                {
                    "name": "CLOBETASOL PROPIONATE",
                    "strength": ".05 g/mL"
                }
            ],
            "finished": True,
            "packaging": [
                {
                    "package_ndc": "0591-4039-46",
                    "description": "1 BOTTLE in 1 CARTON (0591-4039-46)  / 59 mL in 1 BOTTLE",
                    "marketing_start_date": "20150828",
                    "marketing_end_date": "20250930",
                    "sample": False
                },
                {
                    "package_ndc": "0591-4039-74",
                    "description": "1 BOTTLE in 1 CARTON (0591-4039-74)  / 125 mL in 1 BOTTLE",
                    "marketing_start_date": "20150828",
                    "marketing_end_date": "20250930",
                    "sample": False
                }
            ],
            "openfda": {
                "manufacturer_name": ["Actavis Pharma, Inc."],
                "rxcui": ["861512"],
                "spl_set_id": ["907e425a-720a-4180-b97c-9e25008a3658"],
                "is_original_packager": [True],
                "unii": ["779619577M"]
            },
            "marketing_category": "NDA AUTHORIZED GENERIC",
            "dosage_form": "SPRAY",
            "spl_id": "33a56b8b-a9a6-4287-bbf4-d68ad0c59e07",
            "product_type": "HUMAN PRESCRIPTION DRUG",
            "route": ["TOPICAL"],
            "marketing_start_date": "20150828",
            "product_id": "0591-4039_33a56b8b-a9a6-4287-bbf4-d68ad0c59e07",
            "application_number": "NDA021835",
            "brand_name_base": "CLOBETASOL PROPIONATE",
            "pharm_class": [
                "Corticosteroid Hormone Receptor Agonists [MoA]",
                "Corticosteroid [EPC]"
            ]
        }
    ]
}

packaging_data = pd.json_normalize(
    data['results'], 
    record_path=["packaging"], 
    meta=['product_ndc', 'brand_name', 'generic_name']
)

active_ingredients_data = pd.json_normalize(
    data['results'], 
    record_path=["active_ingredients"], 
    meta=['product_ndc', 'brand_name', 'generic_name']
)

combined_data = pd.merge(
    packaging_data,
    active_ingredients_data,
    on=['product_ndc', 'brand_name', 'generic_name'],
    how='outer'
)

print(packaging_data)
print(active_ingredients_data)
print(combined_data)

这给出了

   package_ndc                                        description  \
0  73647-062-04             113 g in 1 BOTTLE, PUMP (73647-062-04)   
1  0591-4039-46  1 BOTTLE in 1 CARTON (0591-4039-46)  / 59 mL i...   
2  0591-4039-74  1 BOTTLE in 1 CARTON (0591-4039-74)  / 125 mL ...   

  marketing_start_date  sample marketing_end_date product_ndc  \
0             20230314   False                NaN   73647-062   
1             20150828   False           20250930   0591-4039   
2             20150828   False           20250930   0591-4039   

                            brand_name           generic_name  
0  JUST CBD - CBD AND THC ULTRA RELIEF       MENTHOL, CAMPHOR  
1                CLOBETASOL PROPIONATE  CLOBETASOL PROPIONATE  
2                CLOBETASOL PROPIONATE  CLOBETASOL PROPIONATE  
                    name  strength product_ndc  \
0    CAMPHOR (SYNTHETIC)  2 g/100g   73647-062   
1                MENTHOL  6 g/100g   73647-062   
2  CLOBETASOL PROPIONATE  .05 g/mL   0591-4039   

                            brand_name           generic_name  
0  JUST CBD - CBD AND THC ULTRA RELIEF       MENTHOL, CAMPHOR  
1  JUST CBD - CBD AND THC ULTRA RELIEF       MENTHOL, CAMPHOR  
2                CLOBETASOL PROPIONATE  CLOBETASOL PROPIONATE  
    package_ndc                                        description  \
0  0591-4039-46  1 BOTTLE in 1 CARTON (0591-4039-46)  / 59 mL i...   
...
0  CLOBETASOL PROPIONATE  .05 g/mL  
1  CLOBETASOL PROPIONATE  .05 g/mL  
2    CAMPHOR (SYNTHETIC)  2 g/100g  
3                MENTHOL  6 g/100g  
© www.soinside.com 2019 - 2024. All rights reserved.