使用 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 值

使用 Python/Pandas 解析嵌套的 JSON

使用 pandas python 将嵌套的 JSON 解析为多个数据帧

在使用 Pandas 的 Python 中,是不是可以逐块读取 4B 行并针对内存中已经存在的 30M 行数据帧过滤每个卡盘?

用python中的嵌套结构构建一个带有pandas的数据框