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

pandas DataFrame嵌套JSON列展平:保留其他字段复制生成对应新行

嵌套作者字段展平解决方案

首先你给出的示例Authors字段存在语法错误,修正后的标准格式应为:
[{'First_Name':'George','Last_Name':'Washington','Affiliation':'USA'},{'First_Name':'Bill','Last_Name':'Buttlicker','Affiliation':'CAN'}]

以下是两种常用运行环境的实现方法:

1. Pandas 环境操作

操作逻辑为:先校验Authors字段格式,再拆分单作者行,最后解析作者字段合并到原数据集。

import pandas as pd
from ast import literal_eval

# 构造示例原始数据
raw_data = [
    {
        "Text_ID": 1,
        "Title": "Theory of Theories",
        "Abstract": "Text Example",
        "Year": 2019,
        "Authors": "[{'First_Name':'George','Last_Name':'Washington','Affiliation':'USA'},{'First_Name':'Bill','Last_Name':'Buttlicker','Affiliation':'CAN'}]"
    }
]
df = pd.DataFrame(raw_data)

# 若Authors为字符串格式,需先转为Python列表(已为列表格式可跳过此步)
df["Authors"] = df["Authors"].apply(literal_eval)

# 核心展平操作
# 1. 将每个作者拆分为单独行
df_exploded = df.explode("Authors", ignore_index=True)
# 2. 解析作者字典并合并到原数据集
df_final = pd.concat([
    df_exploded.drop("Authors", axis=1),
    pd.json_normalize(df_exploded["Authors"])
], axis=1)

输出结果会保留所有原有公共字段,每个作者单独成一行,同时新增First_Name、Last_Name、Affiliation三个作者属性字段。

2. PySpark 环境操作

针对大数据量场景,可直接用Spark内置函数处理:

from pyspark.sql import functions as F

# 假设df为原始Spark DataFrame,且Authors字段已解析为array<struct>类型
df_final = df.select(
    "Text_ID", "Title", "Abstract", "Year",
    F.explode("Authors").alias("author")
).select(
    "Text_ID", "Title", "Abstract", "Year",
    "author.First_Name", "author.Last_Name", "author.Affiliation"
)

常见操作失败原因

  • Authors字段为字符串类型的JSON,未提前转成列表/结构体类型,直接调用json_normalize无法识别
  • 原始数据中Authors存在多余嵌套层级、语法错误,需先清洗为一维字典列表格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:24:03