[英]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.