使用 Pandas 在 Python 中过滤嵌套的 JSON 数据
Posted
技术标签:
【中文标题】使用 Pandas 在 Python 中过滤嵌套的 JSON 数据【英文标题】:Filter Nested JSON Data in Python with Pandas 【发布时间】:2020-10-06 21:53:08 【问题描述】:我正在使用一个包含嵌套 JSON 数据的文件,然后我将其转换为 pandas 数据框以过滤选择。问题是,当它转换为 pandas 数据框时,列名变为 parent.child,如 JSON 结构所指示的那样。一旦过滤器操作完成,当我尝试将数据帧转换回 JSON 时,JSON 的嵌套结构会丢失,我只剩下下面的内容。是否有可能在转换回 JSON 时不会丢失 JSON 的嵌套结构?
with open('charts.json', 'r') as file:
charts = json.load(file)
lineChart = pd.json_normalize(charts, "line_chart")
lineChartFiltered = lineChart.loc[lineChart['selection'] == 'Tom'].to_json(orient='records')
lineChartFiltered 当前生成的内容:
'["selection":"Tom","speed.running":["x":1596153600000,"y":9.77,"color":"#1F8924"]]'
我更喜欢什么:
["selection":"Tom",
speed:
running:[
x:123,
y: 23,
cost: 244
]
]
【问题讨论】:
预期结果如前所述。本质上我需要 JSON 来保留它的嵌套性质: ["selection":"Tom", speed: running:[ x:123, y: 23, cost: 244 ], walk:[ x:13, y:223,成本:24 ]]。而不是 ["selection":"Tom","speed.running":["x":123,"y":23,"cost":244], "speed.walking":["x ":13,"y":233,"cost":24]] 【参考方案1】:我发现您可以在 json_normalize 中设置最大解析级别,以确保点表示法不用于嵌套的 JSON 结构。这解决了我的问题:
linechart = pd.json_normalize(charts, "line_chart", max_level=0)
【讨论】:
以上是关于使用 Pandas 在 Python 中过滤嵌套的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中
无法在 python pandas 数据框中附加嵌套的 JSON 值
使用 pandas python 将嵌套的 JSON 解析为多个数据帧
在使用 Pandas 的 Python 中,是不是可以逐块读取 4B 行并针对内存中已经存在的 30M 行数据帧过滤每个卡盘?