簡體   English   中英

Python - 展平嵌套的 JSON 文件

[英]Python - Flattening the nested JSON file

我正在處理從諾貝爾獎 API 中提取的 API 數據。
特別是以下端點(Nobel API 版本 2): https : //api.nobelprize.org/2.0/laureates
我已經使用我構建的一個簡單的 Python 腳本成功地提取了它們。

以下是 JSON 文件內容的一些示例。
但首先,請允許我就代碼片段的長度提前道歉。
我找不到更好的方式來呈現它。

類型 - 1

{
    "laureates": [
        {
            "birth": {
                "date": "1943-00-00",
                "place": {
                    "city": {
                        "en": "Montclair, NJ",
                        "no": "Montclair, NJ",
                        "se": "Montclair, NJ"
                    },
                    "cityNow": {
                        "en": "Montclair, NJ",
                        "no": "Montclair, NJ",
                        "se": "Montclair, NJ"
                    },
                    "continent": {
                        "en": "North America"
                    },
                    "country": {
                        "en": "USA",
                        "no": "USA",
                        "se": "USA"
                    },
                    "countryNow": {
                        "en": "USA",
                        "no": "USA",
                        "se": "USA"
                    },
                    "locationString": {
                        "en": "Montclair, NJ, USA",
                        "no": "Montclair, NJ, USA",
                        "se": "Montclair, NJ, USA"
                    }
                }
            },
            "familyName": {
                "en": "Spence",
                "se": "Spence"
            },
            "fullName": {
                "en": "A. Michael Spence",
                "se": "A. Michael Spence"
            },
            "gender": "male",
            "givenName": {
                "en": "A. Michael",
                "se": "A. Michael"
            },
            "id": "745",
            "knownName": {
                "en": "A. Michael Spence",
                "se": "A. Michael Spence"
            },
            "links": {
                "action": "Get",
                "href": "http://masterdataapi.nobelprize.org/2/laureate/745",
                "rel": "laureate",
                "types": "application/json"
            },
            "nobelPrizes": [
                {
                    "affiliations": [
                        {
                            "city": {
                                "en": "Stanford, CA",
                                "no": "Stanford, CA",
                                "se": "Stanford, CA"
                            },
                            "cityNow": {
                                "en": "Stanford, CA",
                                "no": "Stanford, CA",
                                "se": "Stanford, CA"
                            },
                            "country": {
                                "en": "USA",
                                "no": "USA",
                                "se": "USA"
                            },
                            "countryNow": {
                                "en": "USA",
                                "no": "USA",
                                "se": "USA"
                            },
                            "locationString": {
                                "en": "Stanford, CA, USA",
                                "no": "Stanford, CA, USA",
                                "se": "Stanford, CA, USA"
                            },
                            "name": {
                                "en": "Stanford University",
                                "no": "Stanford University",
                                "se": "Stanford University"
                            },
                            "nameNow": {
                                "en": "Stanford University"
                            }
                        }
                    ],
                    "awardYear": "2001",
                    "category": {
                        "en": "Economic Sciences",
                        "no": "\u00d8konomi",
                        "se": "Ekonomi"
                    },
                    "categoryFullName": {
                        "en": "The Sveriges Riksbank Prize in Economic Sciences in Memory of Alfred Nobel",
                        "no": "Sveriges Riksbanks pris i \u00f8konomisk vitenskap til minne om Alfred Nobel",
                        "se": "Sveriges Riksbanks pris i ekonomisk vetenskap till Alfred Nobels minne"
                    },
                    "dateAwarded": "2001-10-10",
                    "links": {
                        "action": "Get",
                        "href": "https://masterdataapi.nobelprize.org/2/nobelPrize/eco/2001",
                        "rel": "nobelPrize",
                        "types": "application/json"
                    },
                    "motivation": {
                        "en": "for their analyses of markets with asymmetric information",
                        "se": "f\u00f6r deras analys av marknader med assymetrisk informations"
                    },
                    "portion": "1/3",
                    "prizeAmount": 10000000,
                    "prizeAmountAdjusted": 12295082,
                    "prizeStatus": "received",
                    "sortOrder": "2"
                }
            ]
        }}

內容的類型 2 視圖有一個新的“密鑰”,稱為“死亡”。
它位於“出生”鍵和“familyName”鍵之間。 下面是一個例子。

"death": {
                "date": "2009-09-08",
                "place": {
                    "city": {
                        "en": "Copenhagen",
                        "no": "K\u00f8benhavn",
                        "se": "K\u00f6penhamn"
                    },
                    "cityNow": {
                        "en": "Copenhagen",
                        "no": "K\u00f8benhavn",
                        "se": "K\u00f6penhamn"
                    },
                    "continent": {
                        "en": "Europe"
                    },
                    "country": {
                        "en": "Denmark",
                        "no": "Danmark",
                        "se": "Danmark"
                    },
                    "countryNow": {
                        "en": "Denmark",
                        "no": "Danmark",
                        "se": "Danmark"
                    },
                    "locationString": {
                        "en": "Copenhagen, Denmark",
                        "no": "K\u00f8benhavn, Danmark",
                        "se": "K\u00f6penhamn, Danmark"
                    }
                }
            }

說到 JSON,我是個菜鳥。
但是,根據我的理解,上面的 JSON 文件是大量嵌套的,因此在我們將其存儲在 Pandas DataFrame 之前需要某種形式的展

這就是我被困的地方,我在 Stack Overflow 上搜索了類似的主題。
但是,我無法理解它。 看來我可以在 Pandas 中使用json_normalize函數。 但是,鑒於 JSON 文件的結構,我不確定在以下參數record_pathmeta上放什么。

因此,Stack Overflow 社區會幫助我學習使用 JSON 文件嗎?
非常感謝您的時間!

(如果我不夠清楚,
我想將當前的 JSON 文件展平為展平版本,以便我可以將其用作 Pandas DataFrame。
對此我深表歉意!)

假設您的第一個片段存儲在一個名為data的變量中,您需要做的就是:

import pandas

laureates: pandas.core.frame.DataFrame = pandas.json_normalize(data['laureates'])

它會給你一個DataFrame。 問題是每個獲獎者都有諾貝爾獎列表,因此您可能希望將其提取到單獨的 DataFrame 中(否則您最終會得到一個 DF,其中包含nobelPrizes列中的nobelPrizes列表)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM