[英]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_path
和meta
上放什么。
因此,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.