You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas展开Excel表格中的JSON数组列?

用Pandas展开Excel中的JSON数组列

当然可以完美实现这个需求!你的思路方向是对的,只是在细节处理上需要调整,我来一步步给你拆解怎么做:

步骤1:解析JSON字符串为Python对象

首先要注意:Excel里存储的JSON数组大概率是字符串格式,所以第一步得把它转换成Python的列表/字典,这样Pandas才能处理。我们可以用json.loads配合apply来批量处理:

import pandas as pd
import json

# 读取你的Excel文件
df = pd.read_excel("your_file_path.xlsx")

# 将JSON字符串列解析为Python列表
df["MyJSON_COLUMN"] = df["MyJSON_COLUMN"].apply(json.loads)

步骤2:用explode拆分数组为单行

这时候MyJSON_COLUMN里的每个元素都是一个JSON对象(Python字典),我们可以用explode把数组拆成多行,每个字典单独占一行:

# 拆分数组,ignore_index=True重置索引避免重复
df_exploded = df.explode("MyJSON_COLUMN", ignore_index=True)

步骤3:标准化JSON并合并到原表

接下来用json_normalize把字典展开成多列,然后和原DataFrame的其他列拼接在一起:

# 标准化JSON列,把字典的键转换成列
json_normalized = pd.json_normalize(df_exploded["MyJSON_COLUMN"])

# 合并原数据(去掉原来的JSON列)和标准化后的JSON数据
final_df = pd.concat([df_exploded.drop("MyJSON_COLUMN", axis=1), json_normalized], axis=1)

为什么你的循环方法没生效?

你之前用iterrows的思路其实没问题,但你没有把标准化后的结果和原行关联起来,而且iterrows是逐行遍历,数据量大的时候效率很低。上面的方法用Pandas的矢量化操作,速度会快很多。

完整示例

我给你写一个可运行的示例,模拟你的数据场景:

# 模拟示例数据
sample_data = {
    "Source": ["ServerA", "ServerB"],
    "MyJSON_COLUMN": [
        '[ { "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" } ]',
        '[ { "id":7890, "title":"Outdated TLS Version", "rating":"high", "status":"Active" } ]'
    ]
}

# 创建DataFrame
df = pd.DataFrame(sample_data)

# 解析JSON字符串
df["MyJSON_COLUMN"] = df["MyJSON_COLUMN"].apply(json.loads)

# 拆分数组
df_exploded = df.explode("MyJSON_COLUMN", ignore_index=True)

# 标准化并合并
json_normalized = pd.json_normalize(df_exploded["MyJSON_COLUMN"])
final_df = pd.concat([df_exploded.drop("MyJSON_COLUMN", axis=1), json_normalized], axis=1)

# 查看结果
print(final_df)

运行后你会得到这样的输出:

Source    id                                              title  rating  status
0  ServerA  1234  SSL Certificate - Signature Verification Fail...  medium  Active
1  ServerA  5698  SSL Certificate - Subject Common Name Does No...     low  Active
2  ServerB  7890                          Outdated TLS Version       high  Active

这样就完美把JSON数组展开成了结构化的表格啦!

内容的提问来源于stack exchange,提问作者moe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:02:41