在 Pandas 中扩展 JSON 列

Posted

技术标签:

【中文标题】在 Pandas 中扩展 JSON 列【英文标题】:Expanding a JSON column in Pandas 【发布时间】:2021-02-12 18:23:12 【问题描述】:

我有一个 Excel 表,其中有一列包含类似于下面的 JSON 对象(总是至少有一个项目)。有没有办法用 Pandas 扩展这个专栏?有一个 explode 函数 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html 似乎可以完成工作(结构方面),但它没有对 JSON 进行特殊处理。

[
   
      "id":1234,
      "title":"SSL Certificate - Signature Verification Failed Vulnerability",
      "rating":"medium",
      "status":"Active"
   ,
   
      "id":5698,
      "title":"SSL Certificate - Subject Common Name Does Not Match Server FQDN",
      "rating":"low",
      "status":"Active"
   
]

我还尝试了一个 for 循环来实现这一点,这很好,直到我找不到将标准化 JSON 输出连接到“当前行”的方法:

for index, row in filtered.iterrows():
    findings = row["MyJSON_COLUMN"]   
    pd.json_normalize(findings)

【问题讨论】:

pd.json_normalize(filtered["MyJSON_COLUMN"]) 工作怎么样? @jezrael 你是什么意思?我在这个循环中展开每一列并附加数据框? 是的,如果可能的话,很难知道所有数据看起来,是否可以通过print (df.head().to_dict()) 分享? 【参考方案1】:

您实际上应该使用read_json 而不是json_normalize。请按照以下方式进行。把你所有的字符串,保存为一个json文件

"id":1234,"title":"SSL Certificate - Signature Verification Failed Vulnerability","rating":"medium","status":"Active"
"id":5692,"title":"SSL Certificate - Subject Common Name Does Not Match Server FQDN","rating":"low","status":"Active"

每行的一个字符串。我将它保存为 testingread.json,然后运行它

pd.read_json(r"..../testingread.json", lines=True)

注意lines = true

【讨论】:

JSON 内容是 Excel 工作表中的一列,它描述了父记录中的发现。我试图在复制父记录时扩展这些发现。这就是我改用 json_normalize 的原因。

以上是关于在 Pandas 中扩展 JSON 列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 在数据框中的列内扩展嵌套的 json 数组

.json 扩展文件 + 时间戳 + Pandas + Python

Pandas 跨记录扩展 json 字段

如何扩展输出显示以查看 Pandas DataFrame 的更多列?

使用 p 值计算 Pandas 扩展/滚动窗口相关性

在 Pandas 中对包含 Python `range` 或类似列表的列执行合并