如何使用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
相关产品推荐
相关产品推荐

