pandas json_normalize KeyError
Posted
技术标签:
【中文标题】pandas json_normalize KeyError【英文标题】: 【发布时间】:2018-08-19 11:24:20 【问题描述】:我有一个没有统一结构的嵌套 json 文件,如以下示例:
[ "name": "Jon", "last": "Jonny",
"name": "Jimmy", "last": "johnson", "kids":["kidName":"johnson_junior","kidAge": "1", "kidName":"johnson_junior2", "kidAge": "4"]]
请注意,在第二项中,第一项中不存在列表名称“kids”。
当我尝试使用 pandas json_normalize 将 json 扁平化时,它会抛出错误消息:“KeyError: 'kids'”
这是 json_normalize 命令:
flat_json = json_normalize(json_file, record_path= 'kids', errors='ignore')
好像json_normalize不支持没有统一结构的嵌套json。
有人遇到过同样的问题吗?你知道如何通过它吗?
【问题讨论】:
你能发布你想要的数据集吗? 【参考方案1】:如果不是很麻烦,我会在该密钥不存在时添加'kids':['kidName':None,'kidAge':None]
。
errors='ignore'
用于meta
中列出的键(参见docu),而您使用kids
指定的是记录路径。
我不知道您是否在寻求一般性建议,例如“如果记录路径密钥有时不可用怎么办?”,但如果您提供的数据示例是您当前的问题,那就是快速修复我会提议。
这样的工作:
data = "name": "Jimmy", "last": "johnson", "kids":["kidName":"johnson_junior","kidAge": "1", "kidName":"johnson_junior2", "kidAge": "4"]]
# then you inform with empty kids if looping doesn't alter your desired flow that much
[elem.update('kids':['kidName':None,'kidAge':None]) for elem in data if 'kids' not in elem.keys()]
# finally you normalize
flat_json = json_normalize(data,'kids', ['name','last'])
输出:
kidAge kidName name last
0 None None Jon Jonny
1 1 johnson_junior Jimmy johnson
2 4 johnson_junior2 Jimmy johnson
【讨论】:
谢谢你的回答,如果我有一个简单的 json 就可以了,但是我有多个嵌套的 json 文件,里面有很多项目,我不知道里面所有嵌套项目的结构. 酷,我担心会是这样。然后我真的不知道这是否可能。让我们看看其他人是否提出了更好的解决方案! :)以上是关于pandas json_normalize KeyError的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 json_normalize 在 Pandas 中重复列标题?
pandas json_normalize KeyError
Pandas json_normalize 会产生令人困惑的“KeyError”消息?
Pandas json_normalize 返回 KeyError