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

如何将DataFrame中JSON字符串展开为带关联键的多行数据?

问题:展开DataFrame中的嵌套列表数据

现有如下包含嵌套字典列表的DataFrame:

Col1 Col2 
1    [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}]
2    [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}]

需要将其转换为以Col1作为关联键的多行数据,目标格式如下:

Col1 name         size
1    TypeScript1  10 
1    TypeScript2  20
2    TypeScript3  30
2    TypeScript4  40

解决方案(Pandas实现)

完全可以实现,以下是两种常用方法:

方法一:结合explode()与json_normalize()

这种方法逻辑清晰,适合处理复杂嵌套结构:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'Col1': [1, 2],
    'Col2': [
        [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}],
        [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}]
    ]
})

# 1. 展开Col2列的列表数据
df_exploded = df.explode('Col2').reset_index(drop=True)
# 2. 将嵌套字典拆分为单独列,再与Col1合并
result = pd.concat([df_exploded['Col1'], pd.json_normalize(df_exploded['Col2'])], axis=1)

print(result)

运行输出:

Col1          name  size
0     1  TypeScript1    10
1     1  TypeScript2    20
2     2  TypeScript3    30
3     2  TypeScript4    40

方法二:链式写法(简洁版)

如果追求代码简洁,可使用apply结合Series直接拆分:

import pandas as pd

df = pd.DataFrame({
    'Col1': [1, 2],
    'Col2': [
        [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}],
        [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}]
    ]
})

result = df.explode('Col2').apply(lambda x: pd.Series({**{'Col1': x['Col1']}, **x['Col2']}), axis=1)

print(result)

输出结果与方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:05:11