我正在处理从诺贝尔奖API中获得的API数据。
特别是以下端点(Nobel API版本2):https://api.nobelprize.org/2.0/laureates
我已使用自己构建的simple Python Script成功拉出它们。
下面是一些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中之前,需要某种形式的 flattening 。
这是我受困的地方,我已经在Stack Overflow上搜索了类似的主题。
但是,我无法解决这个问题。看来我可以在Pandas中使用json_normalize
函数。但是,考虑到JSON文件的结构,我不确定要在以下参数record_path
和meta
上加上什么。
因此,Stack Overflow社区是否可以帮助我学习使用JSON文件?
非常感谢您的宝贵时间!
(如果我不够清楚,
我想将当前的JSON文件展平为展平的版本,以便可以将其用作Pandas DataFrame。
我为此表示歉意!)
答案 0 :(得分:2)
假设您的第一个片段存储在名为data
的变量中,您要做的就是:
import pandas
laureates: pandas.core.frame.DataFrame = pandas.json_normalize(data['laureates'])
,它将为您提供一个DataFrame。问题是每个获奖者都有一个诺贝尔奖得主名单,因此您可能需要将其提取到一个单独的DataFrame中(否则,您将得到一个nobelPrizes
列中有字典列表的DF)