将嵌套的 json 转换为具有特定输出的数据框
Posted
技术标签:
【中文标题】将嵌套的 json 转换为具有特定输出的数据框【英文标题】:converting nested json into dataframe with a specific output 【发布时间】:2021-08-27 11:22:14 【问题描述】:假设我有一些 JSON 如下
response =
"totalrecords": 2,
"data": [
"stateCd": "U.K",
"stateName": "uttarakhand",
"details":
"id": [
"2312-k",
"2312-k"
],
"date": [
"10-OCT-2019",
"11-OCT-2019"
],
"icp": [
2233,
6443
],
"icpr": [
3.434,
23.232
]
,
"stateCd": "U.P",
"stateName": "uttar pradesh",
"details":
"id": [
"2712-k",
"5412-k"
],
"date": [
"10-OCT-2019",
"11-OCT-2019"
],
"icp": [
2233,
6443
],
"icpr": [
32.434,
31.232
]
]
我想把它转换成如下的数据框
但在尝试使用pandas.json_normalize()
将其转换为数据帧时
我无法达到我想要的输出
我尝试过的:
data_trunc=response['data'] # to extract data from response
pd.json_normalize(data_trunc)
pd.json_normalize(data_trunc,record_path=['details','id'],meta=['stateCd','stateName'])
但这不包括date
、icp
、icpr
列
所以我尝试了不同的排列组合
pd.json_normalize(data_trunc,record_path=[['details','id'],['date']],meta=['stateCd','stateName'])
pd.json_normalize(data_trunc,record_path=[['details','id'],['details'.'date']],meta=['stateCd','stateName'])
但遇到同样的错误TypeError: unhashable type: 'list'
【问题讨论】:
你的response = ...
实际上不是JSON,它是一个Python dict
,当这样格式化时看起来像JSON。 (虽然在这里没关系,因为pandas.json_normalize()
确实需要dict
输入)
【参考方案1】:
你需要爆发。
pd.json_normalize(data_trunc).apply(pd.Series.explode)
stateCd | stateName | details.id | details.date | details.icp | details.icpr | |
---|---|---|---|---|---|---|
0 | U.K | uttarakhand | 2312-k | 10-OCT-2019 | 2233 | 3.434 |
0 | U.K | uttarakhand | 2312-k | 11-OCT-2019 | 6443 | 23.232 |
1 | U.P | uttar pradesh | 2712-k | 10-OCT-2019 | 2233 | 32.434 |
1 | U.P | uttar pradesh | 5412-k | 11-OCT-2019 | 6443 | 31.232 |
【讨论】:
以上是关于将嵌套的 json 转换为具有特定输出的数据框的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyspark 将 spark 数据帧转换为嵌套 JSON