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

Pandas json_normalize 不会展平所有嵌套字段

Pandas json_normalize 无法在 Python 中使用大型 JSON 文件