如何将JSON数据集中列内的数组转为多列(Python/Spark/Pandas)
数组列转多列的实现方案(Spark/Pandas/纯Python)
针对你提供的JSON数据结构(items为结构体数组),以下是三种主流工具的实现方法,最终提取出id和idAccount列:
一、Spark 实现
Spark处理嵌套数组最直接的方式是先展开数组,再提取结构体字段:
from pyspark.sql import SparkSession from pyspark.sql.functions import explode # 初始化SparkSession spark = SparkSession.builder.appName("ArrayToColumns").getOrCreate() # 读取JSON数据(替换为你的文件路径) df = spark.read.json("data.json") # 1. 展开items数组,每个数组元素生成一行 exploded_df = df.select(explode("items").alias("item")) # 2. 提取结构体中的指定字段 result_df = exploded_df.select("item.id", "item.idAccount") # 查看结果 result_df.show()
如果需要保留原数据的其他列,可在select时一并加入,例如:df.select("other_column", explode("items").alias("item"))。
二、Pandas 实现
Pandas通过explode展开数组后,将结构体转为多列:
import pandas as pd import json # 读取JSON数据(替换为你的文件路径) with open("data.json", "r") as f: data = json.load(f) df = pd.DataFrame(data) # 1. 展开items数组,重置索引 exploded_df = df.explode("items", ignore_index=True) # 2. 将结构体列拆分为多列,提取目标字段 result_df = exploded_df["items"].apply(pd.Series)[["id", "idAccount"]] # 查看结果 print(result_df)
若需保留原数据其他列,可合并到结果中:result_df = pd.concat([exploded_df.drop("items", axis=1), result_df], axis=1)。
三、纯Python 实现
无需依赖数据分析库,直接用原生JSON处理:
import json # 读取JSON数据(替换为你的文件路径) with open("data.json", "r") as f: data = json.load(f) # 遍历提取目标字段 result = [] for entry in data: for item in entry["items"]: result.append({ "id": item["id"], "idAccount": item["idAccount"] }) # 打印表格形式结果 print("id\tidAccount") for row in result: print(f"{row['id']}\t{row['idAccount']}")
内容的提问来源于stack exchange,提问作者SHelBy_CoDeR
相关产品推荐
相关产品推荐

